• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef WebPage_h
27 #define WebPage_h
28 
29 #include "APIObject.h"
30 #include "DrawingArea.h"
31 #include "FindController.h"
32 #include "GeolocationPermissionRequestManager.h"
33 #include "ImageOptions.h"
34 #include "InjectedBundlePageContextMenuClient.h"
35 #include "InjectedBundlePageEditorClient.h"
36 #include "InjectedBundlePageFormClient.h"
37 #include "InjectedBundlePageFullScreenClient.h"
38 #include "InjectedBundlePageLoaderClient.h"
39 #include "InjectedBundlePagePolicyClient.h"
40 #include "InjectedBundlePageResourceLoadClient.h"
41 #include "InjectedBundlePageUIClient.h"
42 #include "MessageSender.h"
43 #include "Plugin.h"
44 #include "SandboxExtension.h"
45 #include "WebEditCommand.h"
46 #include <WebCore/DragData.h>
47 #include <WebCore/Editor.h>
48 #include <WebCore/FrameLoaderTypes.h>
49 #include <WebCore/IntRect.h>
50 #include <WebCore/ScrollTypes.h>
51 #include <WebCore/WebCoreKeyboardUIMode.h>
52 #include <wtf/HashMap.h>
53 #include <wtf/OwnPtr.h>
54 #include <wtf/PassRefPtr.h>
55 #include <wtf/RefPtr.h>
56 #include <wtf/text/WTFString.h>
57 
58 #if ENABLE(TOUCH_EVENTS)
59 #include <WebCore/PlatformTouchEvent.h>
60 #endif
61 
62 #if PLATFORM(MAC)
63 #include "DictionaryPopupInfo.h"
64 #include <wtf/RetainPtr.h>
65 OBJC_CLASS AccessibilityWebPageObject;
66 OBJC_CLASS NSDictionary;
67 OBJC_CLASS NSObject;
68 #endif
69 
70 namespace CoreIPC {
71     class ArgumentDecoder;
72     class Connection;
73     class MessageID;
74 }
75 
76 namespace WebCore {
77     class GraphicsContext;
78     class KeyboardEvent;
79     class Page;
80     class PrintContext;
81     class Range;
82     class ResourceRequest;
83     class SharedBuffer;
84     class VisibleSelection;
85     struct KeypressCommand;
86 }
87 
88 namespace WebKit {
89 
90 class DrawingArea;
91 class InjectedBundleBackForwardList;
92 class PageOverlay;
93 class PluginView;
94 class SessionState;
95 class WebContextMenu;
96 class WebContextMenuItemData;
97 class WebEvent;
98 class WebFrame;
99 class WebFullScreenManager;
100 class WebImage;
101 class WebInspector;
102 class WebKeyboardEvent;
103 class WebMouseEvent;
104 class WebOpenPanelResultListener;
105 class WebPageGroupProxy;
106 class WebPopupMenu;
107 class WebWheelEvent;
108 struct AttributedString;
109 struct EditorState;
110 struct PrintInfo;
111 struct WebPageCreationParameters;
112 struct WebPreferencesStore;
113 
114 #if ENABLE(GESTURE_EVENTS)
115 class WebGestureEvent;
116 #endif
117 
118 #if ENABLE(TOUCH_EVENTS)
119 class WebTouchEvent;
120 #endif
121 
122 class WebPage : public APIObject, public CoreIPC::MessageSender<WebPage> {
123 public:
124     static const Type APIType = TypeBundlePage;
125 
126     static PassRefPtr<WebPage> create(uint64_t pageID, const WebPageCreationParameters&);
127     virtual ~WebPage();
128 
129     // Used by MessageSender.
130     CoreIPC::Connection* connection() const;
destinationID()131     uint64_t destinationID() const { return pageID(); }
132 
133     void close();
134 
corePage()135     WebCore::Page* corePage() const { return m_page.get(); }
pageID()136     uint64_t pageID() const { return m_pageID; }
137 
138     void setSize(const WebCore::IntSize&);
size()139     const WebCore::IntSize& size() const { return m_viewSize; }
bounds()140     WebCore::IntRect bounds() const { return WebCore::IntRect(WebCore::IntPoint(), size()); }
141 
142     InjectedBundleBackForwardList* backForwardList();
drawingArea()143     DrawingArea* drawingArea() const { return m_drawingArea.get(); }
144 
pageGroup()145     WebPageGroupProxy* pageGroup() const { return m_pageGroup.get(); }
146 
147     void scrollMainFrameIfNotAtMaxScrollPosition(const WebCore::IntSize& scrollOffset);
148 
149     void scrollBy(uint32_t scrollDirection, uint32_t scrollGranularity);
150 
151 #if ENABLE(INSPECTOR)
152     WebInspector* inspector();
153 #endif
154 
155 #if ENABLE(FULLSCREEN_API)
156     WebFullScreenManager* fullScreenManager();
157 #endif
158 
159     // -- Called by the DrawingArea.
160     // FIXME: We could genericize these into a DrawingArea client interface. Would that be beneficial?
161     void drawRect(WebCore::GraphicsContext&, const WebCore::IntRect&);
162     void drawPageOverlay(WebCore::GraphicsContext&, const WebCore::IntRect&);
163     void layoutIfNeeded();
164 
165     // -- Called from WebCore clients.
166 #if PLATFORM(MAC)
167     bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*, bool saveCommands);
168 #elif !PLATFORM(GTK)
169     bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);
170 #endif
171 
172     void show();
userAgent()173     String userAgent() const { return m_userAgent; }
174     WebCore::IntRect windowResizerRect() const;
175     WebCore::KeyboardUIMode keyboardUIMode();
176 
177     WebEditCommand* webEditCommand(uint64_t);
178     void addWebEditCommand(uint64_t, WebEditCommand*);
179     void removeWebEditCommand(uint64_t);
isInRedo()180     bool isInRedo() const { return m_isInRedo; }
181 
182     void setActivePopupMenu(WebPopupMenu*);
183 
activeOpenPanelResultListener()184     WebOpenPanelResultListener* activeOpenPanelResultListener() const { return m_activeOpenPanelResultListener.get(); }
185     void setActiveOpenPanelResultListener(PassRefPtr<WebOpenPanelResultListener>);
186 
187     // -- Called from WebProcess.
188     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
189     CoreIPC::SyncReplyMode didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
190 
191     // -- InjectedBundle methods
192     void initializeInjectedBundleContextMenuClient(WKBundlePageContextMenuClient*);
193     void initializeInjectedBundleEditorClient(WKBundlePageEditorClient*);
194     void initializeInjectedBundleFormClient(WKBundlePageFormClient*);
195     void initializeInjectedBundleLoaderClient(WKBundlePageLoaderClient*);
196     void initializeInjectedBundlePolicyClient(WKBundlePagePolicyClient*);
197     void initializeInjectedBundleResourceLoadClient(WKBundlePageResourceLoadClient*);
198     void initializeInjectedBundleUIClient(WKBundlePageUIClient*);
199 #if ENABLE(FULLSCREEN_API)
200     void initializeInjectedBundleFullScreenClient(WKBundlePageFullScreenClient*);
201 #endif
202 
injectedBundleContextMenuClient()203     InjectedBundlePageContextMenuClient& injectedBundleContextMenuClient() { return m_contextMenuClient; }
injectedBundleEditorClient()204     InjectedBundlePageEditorClient& injectedBundleEditorClient() { return m_editorClient; }
injectedBundleFormClient()205     InjectedBundlePageFormClient& injectedBundleFormClient() { return m_formClient; }
injectedBundleLoaderClient()206     InjectedBundlePageLoaderClient& injectedBundleLoaderClient() { return m_loaderClient; }
injectedBundlePolicyClient()207     InjectedBundlePagePolicyClient& injectedBundlePolicyClient() { return m_policyClient; }
injectedBundleResourceLoadClient()208     InjectedBundlePageResourceLoadClient& injectedBundleResourceLoadClient() { return m_resourceLoadClient; }
injectedBundleUIClient()209     InjectedBundlePageUIClient& injectedBundleUIClient() { return m_uiClient; }
210 #if ENABLE(FULLSCREEN_API)
injectedBundleFullScreenClient()211     InjectedBundlePageFullScreenClient& injectedBundleFullScreenClient() { return m_fullScreenClient; }
212 #endif
213 
214     bool findStringFromInjectedBundle(const String&, FindOptions);
215 
mainFrame()216     WebFrame* mainFrame() const { return m_mainFrame.get(); }
217     PassRefPtr<Plugin> createPlugin(const Plugin::Parameters&);
218 
219     EditorState editorState() const;
220 
221     String renderTreeExternalRepresentation() const;
222     void executeEditingCommand(const String& commandName, const String& argument);
223     bool isEditingCommandEnabled(const String& commandName);
224     void clearMainFrameName();
225     void sendClose();
226 
227     double textZoomFactor() const;
228     void setTextZoomFactor(double);
229     double pageZoomFactor() const;
230     void setPageZoomFactor(double);
231     void setPageAndTextZoomFactors(double pageZoomFactor, double textZoomFactor);
232 
233     void scaleWebView(double scale, const WebCore::IntPoint& origin);
234     double viewScaleFactor() const;
235 
236     void setUseFixedLayout(bool);
237     void setFixedLayoutSize(const WebCore::IntSize&);
238 
drawsBackground()239     bool drawsBackground() const { return m_drawsBackground; }
drawsTransparentBackground()240     bool drawsTransparentBackground() const { return m_drawsTransparentBackground; }
241 
242     void stopLoading();
243     void stopLoadingFrame(uint64_t frameID);
244     void setDefersLoading(bool deferLoading);
245 
246 #if USE(ACCELERATED_COMPOSITING)
247     void enterAcceleratedCompositingMode(WebCore::GraphicsLayer*);
248     void exitAcceleratedCompositingMode();
249 #endif
250 
251 #if PLATFORM(MAC)
252     void addPluginView(PluginView*);
253     void removePluginView(PluginView*);
254 
windowIsVisible()255     bool windowIsVisible() const { return m_windowIsVisible; }
windowFrameInScreenCoordinates()256     const WebCore::IntRect& windowFrameInScreenCoordinates() const { return m_windowFrameInScreenCoordinates; }
viewFrameInWindowCoordinates()257     const WebCore::IntRect& viewFrameInWindowCoordinates() const { return m_viewFrameInWindowCoordinates; }
258 #elif PLATFORM(WIN)
nativeWindow()259     HWND nativeWindow() const { return m_nativeWindow; }
260 #endif
261 
262     bool windowIsFocused() const;
263     void installPageOverlay(PassRefPtr<PageOverlay>);
264     void uninstallPageOverlay(PageOverlay*, bool fadeOut);
hasPageOverlay()265     bool hasPageOverlay() const { return m_pageOverlay; }
266     WebCore::IntRect windowToScreen(const WebCore::IntRect&);
267 
268     PassRefPtr<WebImage> snapshotInViewCoordinates(const WebCore::IntRect&, ImageOptions);
269     PassRefPtr<WebImage> snapshotInDocumentCoordinates(const WebCore::IntRect&, ImageOptions);
270     PassRefPtr<WebImage> scaledSnapshotInDocumentCoordinates(const WebCore::IntRect&, double scaleFactor, ImageOptions);
271 
272     static const WebEvent* currentEvent();
273 
findController()274     FindController& findController() { return m_findController; }
geolocationPermissionRequestManager()275     GeolocationPermissionRequestManager& geolocationPermissionRequestManager() { return m_geolocationPermissionRequestManager; }
276 
277     void pageDidScroll();
278 #if ENABLE(TILED_BACKING_STORE)
279     void pageDidRequestScroll(const WebCore::IntPoint&);
280     void setActualVisibleContentRect(const WebCore::IntRect&);
281 
resizesToContentsEnabled()282     bool resizesToContentsEnabled() const { return !m_resizesToContentsLayoutSize.isEmpty(); }
resizesToContentsLayoutSize()283     WebCore::IntSize resizesToContentsLayoutSize() const { return m_resizesToContentsLayoutSize; }
284     void setResizesToContentsUsingLayoutSize(const WebCore::IntSize& targetLayoutSize);
285     void resizeToContentsIfNeeded();
286 #endif
287 
288     WebContextMenu* contextMenu();
289 
290     bool hasLocalDataForURL(const WebCore::KURL&);
291     String cachedResponseMIMETypeForURL(const WebCore::KURL&);
292 
293     static bool canHandleRequest(const WebCore::ResourceRequest&);
294 
295     class SandboxExtensionTracker {
296     public:
297         ~SandboxExtensionTracker();
298 
299         void invalidate();
300 
301         void beginLoad(WebFrame*, const SandboxExtension::Handle& handle);
302         void willPerformLoadDragDestinationAction(PassRefPtr<SandboxExtension> pendingDropSandboxExtension);
303         void didStartProvisionalLoad(WebFrame*);
304         void didCommitProvisionalLoad(WebFrame*);
305         void didFailProvisionalLoad(WebFrame*);
306 
307     private:
308         void setPendingProvisionalSandboxExtension(PassRefPtr<SandboxExtension>);
309 
310         RefPtr<SandboxExtension> m_pendingProvisionalSandboxExtension;
311         RefPtr<SandboxExtension> m_provisionalSandboxExtension;
312         RefPtr<SandboxExtension> m_committedSandboxExtension;
313     };
314 
sandboxExtensionTracker()315     SandboxExtensionTracker& sandboxExtensionTracker() { return m_sandboxExtensionTracker; }
316 
317 #if PLATFORM(MAC)
318     void registerUIProcessAccessibilityTokens(const CoreIPC::DataReference& elemenToken, const CoreIPC::DataReference& windowToken);
319     AccessibilityWebPageObject* accessibilityRemoteObject();
accessibilityPosition()320     WebCore::IntPoint accessibilityPosition() const { return m_accessibilityPosition; }
321 
322     void sendComplexTextInputToPlugin(uint64_t pluginComplexTextInputIdentifier, const String& textInput);
323 
324     void setComposition(const String& text, Vector<WebCore::CompositionUnderline> underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeEnd, EditorState& newState);
325     void confirmComposition(EditorState& newState);
326     void insertText(const String& text, uint64_t replacementRangeStart, uint64_t replacementRangeEnd, bool& handled, EditorState& newState);
327     void getMarkedRange(uint64_t& location, uint64_t& length);
328     void getSelectedRange(uint64_t& location, uint64_t& length);
329     void getAttributedSubstringFromRange(uint64_t location, uint64_t length, AttributedString&);
330     void characterIndexForPoint(const WebCore::IntPoint point, uint64_t& result);
331     void firstRectForCharacterRange(uint64_t location, uint64_t length, WebCore::IntRect& resultRect);
332     void executeKeypressCommands(const Vector<WebCore::KeypressCommand>&, bool& handled, EditorState& newState);
333     void writeSelectionToPasteboard(const WTF::String& pasteboardName, const WTF::Vector<WTF::String>& pasteboardTypes, bool& result);
334     void readSelectionFromPasteboard(const WTF::String& pasteboardName, bool& result);
335     void shouldDelayWindowOrderingEvent(const WebKit::WebMouseEvent&, bool& result);
336     void acceptsFirstMouse(int eventNumber, const WebKit::WebMouseEvent&, bool& result);
337     bool performNonEditingBehaviorForSelector(const String&);
338 #elif PLATFORM(WIN)
339     void confirmComposition(const String& compositionString);
340     void setComposition(const WTF::String& compositionString, const WTF::Vector<WebCore::CompositionUnderline>& underlines, uint64_t cursorPosition);
341     void firstRectForCharacterInSelectedRange(const uint64_t characterPosition, WebCore::IntRect& resultRect);
342     void getSelectedText(WTF::String&);
343 
344     void gestureWillBegin(const WebCore::IntPoint&, bool& canBeginPanning);
345     void gestureDidScroll(const WebCore::IntSize&);
346     void gestureDidEnd();
347 #endif
348 
349     // FIXME: This a dummy message, to avoid breaking the build for platforms that don't require
350     // any synchronous messages, and should be removed when <rdar://problem/8775115> is fixed.
351     void dummy(bool&);
352 
353 #if PLATFORM(MAC)
354     void performDictionaryLookupForSelection(DictionaryPopupInfo::Type, WebCore::Frame*, const WebCore::VisibleSelection&);
355 
356     bool isSpeaking();
357     void speak(const String&);
358     void stopSpeaking();
359 
isSmartInsertDeleteEnabled()360     bool isSmartInsertDeleteEnabled() const { return m_isSmartInsertDeleteEnabled; }
361 #endif
362 
363     void replaceSelectionWithText(WebCore::Frame*, const String&);
364 #if PLATFORM(WIN)
365     void performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const WebCore::DragDataMap&, uint32_t flags);
366 #else
367     void performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const WTF::String& dragStorageName, uint32_t flags, const SandboxExtension::Handle&);
368 #endif
369     void dragEnded(WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t operation);
370 
371     void willPerformLoadDragDestinationAction();
372 
373     void beginPrinting(uint64_t frameID, const PrintInfo&);
374     void endPrinting();
375     void computePagesForPrinting(uint64_t frameID, const PrintInfo&, uint64_t callbackID);
376 #if PLATFORM(MAC) || PLATFORM(WIN)
377     void drawRectToPDF(uint64_t frameID, const WebCore::IntRect&, uint64_t callbackID);
378     void drawPagesToPDF(uint64_t frameID, uint32_t first, uint32_t count, uint64_t callbackID);
379 #endif
380 
381     bool mainFrameHasCustomRepresentation() const;
382 
383     void didChangeScrollOffsetForMainFrame();
384 
canRunBeforeUnloadConfirmPanel()385     bool canRunBeforeUnloadConfirmPanel() const { return m_canRunBeforeUnloadConfirmPanel; }
setCanRunBeforeUnloadConfirmPanel(bool canRunBeforeUnloadConfirmPanel)386     void setCanRunBeforeUnloadConfirmPanel(bool canRunBeforeUnloadConfirmPanel) { m_canRunBeforeUnloadConfirmPanel = canRunBeforeUnloadConfirmPanel; }
387 
canRunModal()388     bool canRunModal() const { return m_canRunModal; }
setCanRunModal(bool canRunModal)389     void setCanRunModal(bool canRunModal) { m_canRunModal = canRunModal; }
390 
391     void runModal();
392 
userSpaceScaleFactor()393     float userSpaceScaleFactor() const { return m_userSpaceScaleFactor; }
394 
395     void setMemoryCacheMessagesEnabled(bool);
396 
397     void forceRepaintWithoutCallback();
398 
399     void unmarkAllMisspellings();
400     void unmarkAllBadGrammar();
401 
402 #if PLATFORM(MAC)
403     void setDragSource(NSObject *);
404 #endif
405 
406 #if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD)
407     void handleCorrectionPanelResult(const String&);
408 #endif
409 
410     void simulateMouseDown(int button, WebCore::IntPoint, int clickCount, WKEventModifiers, double time);
411     void simulateMouseUp(int button, WebCore::IntPoint, int clickCount, WKEventModifiers, double time);
412     void simulateMouseMotion(WebCore::IntPoint, double time);
413 
contextMenuShowing()414     void contextMenuShowing() { m_isShowingContextMenu = true; }
415 
416 private:
417     WebPage(uint64_t pageID, const WebPageCreationParameters&);
418 
type()419     virtual Type type() const { return APIType; }
420 
421     void platformInitialize();
422 
423     void didReceiveWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
424     CoreIPC::SyncReplyMode didReceiveSyncWebPageMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
425 
426 #if !PLATFORM(MAC)
427     static const char* interpretKeyEvent(const WebCore::KeyboardEvent*);
428 #endif
429     bool performDefaultBehaviorForKeyEvent(const WebKeyboardEvent&);
430 
431 #if PLATFORM(MAC)
432     bool executeKeypressCommandsInternal(const Vector<WebCore::KeypressCommand>&, WebCore::KeyboardEvent*);
433 #endif
434 
435     String sourceForFrame(WebFrame*);
436 
437     void loadData(PassRefPtr<WebCore::SharedBuffer>, const String& MIMEType, const String& encodingName, const WebCore::KURL& baseURL, const WebCore::KURL& failingURL);
438 
439     bool platformHasLocalDataForURL(const WebCore::KURL&);
440 
441     // Actions
442     void tryClose();
443     void loadURL(const String&, const SandboxExtension::Handle&);
444     void loadURLRequest(const WebCore::ResourceRequest&, const SandboxExtension::Handle&);
445     void loadHTMLString(const String& htmlString, const String& baseURL);
446     void loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL);
447     void loadPlainTextString(const String&);
448     void linkClicked(const String& url, const WebMouseEvent&);
449     void reload(bool reloadFromOrigin);
450     void goForward(uint64_t, const SandboxExtension::Handle&);
451     void goBack(uint64_t, const SandboxExtension::Handle&);
452     void goToBackForwardItem(uint64_t, const SandboxExtension::Handle&);
453     void setActive(bool);
454     void setFocused(bool);
455     void setInitialFocus(bool);
456     void setWindowResizerSize(const WebCore::IntSize&);
457     void setIsInWindow(bool);
458     void validateCommand(const String&, uint64_t);
459     void executeEditCommand(const String&);
460 
461     void mouseEvent(const WebMouseEvent&);
462     void wheelEvent(const WebWheelEvent&);
463     void keyEvent(const WebKeyboardEvent&);
464 #if ENABLE(GESTURE_EVENTS)
465     void gestureEvent(const WebGestureEvent&);
466 #endif
467 #if ENABLE(TOUCH_EVENTS)
468     void touchEvent(const WebTouchEvent&);
469 #endif
contextMenuHidden()470     void contextMenuHidden() { m_isShowingContextMenu = false; }
471 
472     static void scroll(WebCore::Page*, WebCore::ScrollDirection, WebCore::ScrollGranularity);
473     static void logicalScroll(WebCore::Page*, WebCore::ScrollLogicalDirection, WebCore::ScrollGranularity);
474 
475     uint64_t restoreSession(const SessionState&);
476     void restoreSessionAndNavigateToCurrentItem(const SessionState&, const SandboxExtension::Handle&);
477 
478     void didRemoveBackForwardItem(uint64_t);
479 
480     void setDrawsBackground(bool);
481     void setDrawsTransparentBackground(bool);
482 
483     void viewWillStartLiveResize();
484     void viewWillEndLiveResize();
485 
486     void getContentsAsString(uint64_t callbackID);
487     void getMainResourceDataOfFrame(uint64_t frameID, uint64_t callbackID);
488     void getResourceDataFromFrame(uint64_t frameID, const String& resourceURL, uint64_t callbackID);
489     void getRenderTreeExternalRepresentation(uint64_t callbackID);
490     void getSelectionOrContentsAsString(uint64_t callbackID);
491     void getSourceForFrame(uint64_t frameID, uint64_t callbackID);
492     void getWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID);
493     void runJavaScriptInMainFrame(const String&, uint64_t callbackID);
494     void forceRepaint(uint64_t callbackID);
495 
496     void preferencesDidChange(const WebPreferencesStore&);
497     void platformPreferencesDidChange(const WebPreferencesStore&);
498     void updatePreferences(const WebPreferencesStore&);
499 
500     void didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t downloadID);
501     void setUserAgent(const String&);
502     void setCustomTextEncodingName(const String&);
503 
504 #if PLATFORM(MAC)
505     void performDictionaryLookupAtLocation(const WebCore::FloatPoint&);
506     void performDictionaryLookupForRange(DictionaryPopupInfo::Type, WebCore::Frame*, WebCore::Range*, NSDictionary *options);
507 
508     void setWindowIsVisible(bool windowIsVisible);
509     void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates);
510 #endif
511 
512     void unapplyEditCommand(uint64_t commandID);
513     void reapplyEditCommand(uint64_t commandID);
514     void didRemoveEditCommand(uint64_t commandID);
515 
516     void findString(const String&, uint32_t findOptions, uint32_t maxMatchCount);
517     void hideFindUI();
518     void countStringMatches(const String&, uint32_t findOptions, uint32_t maxMatchCount);
519 
520 #if PLATFORM(QT)
521     void findZoomableAreaForPoint(const WebCore::IntPoint&);
522 #endif
523 
524     void didChangeSelectedIndexForActivePopupMenu(int32_t newIndex);
525     void setTextForActivePopupMenu(int32_t index);
526 
527     void didChooseFilesForOpenPanel(const Vector<String>&);
528     void didCancelForOpenPanel();
529 #if ENABLE(WEB_PROCESS_SANDBOX)
530     void extendSandboxForFileFromOpenPanel(const SandboxExtension::Handle&);
531 #endif
532 
533     void didReceiveGeolocationPermissionDecision(uint64_t geolocationID, bool allowed);
534 
535     void advanceToNextMisspelling(bool startBeforeSelection);
536     void changeSpellingToWord(const String& word);
537 #if PLATFORM(MAC)
538     void uppercaseWord();
539     void lowercaseWord();
540     void capitalizeWord();
541 
setSmartInsertDeleteEnabled(bool isSmartInsertDeleteEnabled)542     void setSmartInsertDeleteEnabled(bool isSmartInsertDeleteEnabled) { m_isSmartInsertDeleteEnabled = isSmartInsertDeleteEnabled; }
543 #endif
544 
545 #if ENABLE(CONTEXT_MENUS)
546     void didSelectItemFromActiveContextMenu(const WebContextMenuItemData&);
547 #endif
548 
549     void platformDragEnded();
550 
551     static bool platformCanHandleRequest(const WebCore::ResourceRequest&);
552 
553     OwnPtr<WebCore::Page> m_page;
554     RefPtr<WebFrame> m_mainFrame;
555     RefPtr<InjectedBundleBackForwardList> m_backForwardList;
556 
557     RefPtr<WebPageGroupProxy> m_pageGroup;
558 
559     String m_userAgent;
560 
561     WebCore::IntSize m_viewSize;
562     OwnPtr<DrawingArea> m_drawingArea;
563 
564     bool m_drawsBackground;
565     bool m_drawsTransparentBackground;
566 
567     bool m_isInRedo;
568     bool m_isClosed;
569 
570     bool m_tabToLinks;
571 
572 #if PLATFORM(MAC)
573     // Whether the containing window is visible or not.
574     bool m_windowIsVisible;
575 
576     // Whether smart insert/delete is enabled or not.
577     bool m_isSmartInsertDeleteEnabled;
578 
579     // The frame of the containing window in screen coordinates.
580     WebCore::IntRect m_windowFrameInScreenCoordinates;
581 
582     // The frame of the view in window coordinates.
583     WebCore::IntRect m_viewFrameInWindowCoordinates;
584 
585     // The accessibility position of the view.
586     WebCore::IntPoint m_accessibilityPosition;
587 
588     // All plug-in views on this web page.
589     HashSet<PluginView*> m_pluginViews;
590 
591     RetainPtr<AccessibilityWebPageObject> m_mockAccessibilityElement;
592 
593     RetainPtr<NSObject> m_dragSource;
594 
595     WebCore::KeyboardEvent* m_keyboardEventBeingInterpreted;
596 
597 #elif PLATFORM(WIN)
598     // Our view's window (in the UI process).
599     HWND m_nativeWindow;
600 
601     RefPtr<WebCore::Node> m_gestureTargetNode;
602 #endif
603 
604     HashMap<uint64_t, RefPtr<WebEditCommand> > m_editCommandMap;
605 
606     WebCore::IntSize m_windowResizerSize;
607 
608     InjectedBundlePageContextMenuClient m_contextMenuClient;
609     InjectedBundlePageEditorClient m_editorClient;
610     InjectedBundlePageFormClient m_formClient;
611     InjectedBundlePageLoaderClient m_loaderClient;
612     InjectedBundlePagePolicyClient m_policyClient;
613     InjectedBundlePageResourceLoadClient m_resourceLoadClient;
614     InjectedBundlePageUIClient m_uiClient;
615 #if ENABLE(FULLSCREEN_API)
616     InjectedBundlePageFullScreenClient m_fullScreenClient;
617 #endif
618 
619 #if ENABLE(TILED_BACKING_STORE)
620     WebCore::IntSize m_resizesToContentsLayoutSize;
621 #endif
622 
623     FindController m_findController;
624     RefPtr<PageOverlay> m_pageOverlay;
625 
626 #if ENABLE(INSPECTOR)
627     RefPtr<WebInspector> m_inspector;
628 #endif
629 #if ENABLE(FULLSCREEN_API)
630     RefPtr<WebFullScreenManager> m_fullScreenManager;
631 #endif
632     RefPtr<WebPopupMenu> m_activePopupMenu;
633     RefPtr<WebContextMenu> m_contextMenu;
634     RefPtr<WebOpenPanelResultListener> m_activeOpenPanelResultListener;
635     GeolocationPermissionRequestManager m_geolocationPermissionRequestManager;
636 
637     OwnPtr<WebCore::PrintContext> m_printContext;
638 
639     SandboxExtensionTracker m_sandboxExtensionTracker;
640     uint64_t m_pageID;
641 
642     RefPtr<SandboxExtension> m_pendingDropSandboxExtension;
643 
644     bool m_canRunBeforeUnloadConfirmPanel;
645 
646     bool m_canRunModal;
647     bool m_isRunningModal;
648 
649     float m_userSpaceScaleFactor;
650 
651     bool m_cachedMainFrameIsPinnedToLeftSide;
652     bool m_cachedMainFrameIsPinnedToRightSide;
653 
654     bool m_isShowingContextMenu;
655 
656 #if PLATFORM(WIN)
657     bool m_gestureReachedScrollingLimit;
658 #endif
659 };
660 
661 } // namespace WebKit
662 
663 #endif // WebPage_h
664