165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer.
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    documentation and/or other materials provided with the distribution.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE.
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef PageClient_h
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define PageClient_h
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "ShareableBitmap.h"
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageProxy.h"
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPopupMenuProxy.h"
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/Forward.h>
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebCore {
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    class Cursor;
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    struct ViewportArguments;
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass DrawingAreaProxy;
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass FindIndicator;
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass NativeWebKeyboardEvent;
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass NativeWebKeyboardEvent;
4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebContextMenuProxy;
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebEditCommandProxy;
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebPopupMenuProxy;
4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass PageClient {
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochpublic:
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual ~PageClient() { }
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Create a new drawing area proxy for the given page.
5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy() = 0;
5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Tell the view to invalidate the given rect. The rect is in view coordinates.
5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void setViewNeedsDisplay(const WebCore::IntRect&) = 0;
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Tell the view to immediately display its invalid rect.
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void displayView() = 0;
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
62ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    // Tell the view to scroll scrollRect by scrollOffset.
63ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    virtual void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset) = 0;
64ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Return the size of the view the page is associated with.
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual WebCore::IntSize viewSize() = 0;
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Return whether the view's containing window is active.
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual bool isViewWindowActive() = 0;
7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Return whether the view is focused.
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual bool isViewFocused() = 0;
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Return whether the view is visible.
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual bool isViewVisible() = 0;
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Return whether the view is in a window.
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual bool isViewInWindow() = 0;
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void processDidCrash() = 0;
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void didRelaunchProcess() = 0;
822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void pageClosed() = 0;
8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void toolTipChanged(const String&, const String&) = 0;
8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(TILED_BACKING_STORE)
872bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void pageDidRequestScroll(const WebCore::IntPoint&) = 0;
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(QT)
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void didChangeContentsSize(const WebCore::IntSize&) = 0;
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void didFindZoomableArea(const WebCore::IntRect&) = 0;
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void setCursor(const WebCore::Cursor&) = 0;
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void setViewportArguments(const WebCore::ViewportArguments&) = 0;
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo) = 0;
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void clearAllEditCommands() = 0;
992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual bool canUndoRedo(WebPageProxy::UndoOrRedo) = 0;
1002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void executeUndoRedo(WebPageProxy::UndoOrRedo) = 0;
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC)
1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void accessibilityWebProcessTokenReceived(const CoreIPC::DataReference&) = 0;
1032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual bool interpretKeyEvent(const NativeWebKeyboardEvent&, Vector<WebCore::KeypressCommand>&) = 0;
1042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual bool executeSavedCommandBySelector(const String& selector) = 0;
1052bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void setDragImage(const WebCore::IntPoint& clientPosition, PassRefPtr<ShareableBitmap> dragImage, bool isLinkDrag) = 0;
1062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void updateSecureInputState() = 0;
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(WIN)
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void compositionSelectionChanged(bool) = 0;
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
1112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(GTK)
1122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void getEditorCommandsForKeyEvent(const NativeWebKeyboardEvent&, Vector<WTF::String>&) = 0;
1132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&) = 0;
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&) = 0;
1162bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) = 0;
1172bde8e466a4451c7319e3a072d118917957d6554Steve Block
1182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled) = 0;
11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*) = 0;
12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*) = 0;
12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut) = 0;
12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING)
1262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) = 0;
1272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void exitAcceleratedCompositingMode() = 0;
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(WIN)
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual HWND nativeWindow() = 0;
1322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void setGestureReachedScrollingLimit(bool) = 0;
13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC)
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void setComplexTextInputEnabled(uint64_t pluginComplexTextInputIdentifier, bool complexTextInputEnabled) = 0;
137ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    virtual CGContextRef containingWindowGraphicsContext() = 0;
13881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void didPerformDictionaryLookup(const String&, double scaleFactor, const DictionaryPopupInfo&) = 0;
1392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void dismissDictionaryLookupPanel() = 0;
1402bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void showCorrectionPanel(WebCore::CorrectionPanelInfo::PanelType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) = 0;
1412bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingCorrectionPanel) = 0;
1422bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual String dismissCorrectionPanelSoon(WebCore::ReasonForDismissingCorrectionPanel) = 0;
1432bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void recordAutocorrectionResponse(WebCore::EditorClient::AutocorrectionResponseType, const String& replacedString, const String& replacementString) = 0;
14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void didChangeScrollbarsForMainFrame() const = 0;
1472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Custom representations.
14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void didCommitLoadForMainFrame(bool useCustomRepresentation) = 0;
15081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference&) = 0;
15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual double customRepresentationZoomFactor() = 0;
15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void setCustomRepresentationZoomFactor(double) = 0;
15381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
15481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void flashBackingStoreUpdates(const Vector<WebCore::IntRect>& updateRects) = 0;
1552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void findStringInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) = 0;
1562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void countStringMatchesInCustomRepresentation(const String&, FindOptions, unsigned maxMatchCount) = 0;
1572bde8e466a4451c7319e3a072d118917957d6554Steve Block
1582bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual float userSpaceScaleFactor() const = 0;
15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch};
16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // PageClient_h
164