|  | /* | 
|  | * Copyright (C) 2009 Google Inc. All rights reserved. | 
|  | * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). | 
|  | * | 
|  | * Redistribution and use in source and binary forms, with or without | 
|  | * modification, are permitted provided that the following conditions are | 
|  | * met: | 
|  | * | 
|  | *     * Redistributions of source code must retain the above copyright | 
|  | * notice, this list of conditions and the following disclaimer. | 
|  | *     * Redistributions in binary form must reproduce the above | 
|  | * copyright notice, this list of conditions and the following disclaimer | 
|  | * in the documentation and/or other materials provided with the | 
|  | * distribution. | 
|  | *     * Neither the name of Google Inc. nor the names of its | 
|  | * contributors may be used to endorse or promote products derived from | 
|  | * this software without specific prior written permission. | 
|  | * | 
|  | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
|  | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
|  | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
|  | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
|  | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
|  | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
|  | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
|  | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
|  | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|  | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
|  | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|  | */ | 
|  |  | 
|  | #ifndef ChromeClientImpl_h | 
|  | #define ChromeClientImpl_h | 
|  |  | 
|  | #include "core/page/ChromeClient.h" | 
|  | #include "core/page/WindowFeatures.h" | 
|  | #include "public/web/WebNavigationPolicy.h" | 
|  | #include "web/WebExport.h" | 
|  | #include "wtf/PassOwnPtr.h" | 
|  |  | 
|  | namespace blink { | 
|  |  | 
|  | class PagePopup; | 
|  | class PagePopupClient; | 
|  | class WebViewImpl; | 
|  | struct WebCursorInfo; | 
|  |  | 
|  | // Handles window-level notifications from core on behalf of a WebView. | 
|  | class WEB_EXPORT ChromeClientImpl final : public ChromeClient { | 
|  | public: | 
|  | static ChromeClientImpl* create(WebViewImpl*); | 
|  | ~ChromeClientImpl() override; | 
|  |  | 
|  | void* webView() const override; | 
|  |  | 
|  | // ChromeClient methods: | 
|  | void chromeDestroyed() override; | 
|  | void setWindowRect(const IntRect&) override; | 
|  | IntRect windowRect() override; | 
|  | IntRect pageRect() override; | 
|  | void focus() override; | 
|  | bool canTakeFocus(WebFocusType) override; | 
|  | void takeFocus(WebFocusType) override; | 
|  | void focusedNodeChanged(Node* fromNode, Node* toNode) override; | 
|  | void beginLifecycleUpdates() override; | 
|  | bool hadFormInteraction() const override; | 
|  | void startDragging(LocalFrame*, const WebDragData&, WebDragOperationsMask, const WebImage& dragImage, const WebPoint& dragImageOffset) override; | 
|  | bool acceptsLoadDrops() const override; | 
|  | Page* createWindow( | 
|  | LocalFrame*, const FrameLoadRequest&, const WindowFeatures&, NavigationPolicy, ShouldSetOpener) override; | 
|  | void show(NavigationPolicy) override; | 
|  | void didOverscroll( | 
|  | const FloatSize& overscrollDelta, | 
|  | const FloatSize& accumulatedOverscroll, | 
|  | const FloatPoint& positionInViewport, | 
|  | const FloatSize& velocityInViewport) override; | 
|  | void setToolbarsVisible(bool) override; | 
|  | bool toolbarsVisible() override; | 
|  | void setStatusbarVisible(bool) override; | 
|  | bool statusbarVisible() override; | 
|  | void setScrollbarsVisible(bool) override; | 
|  | bool scrollbarsVisible() override; | 
|  | void setMenubarVisible(bool) override; | 
|  | bool menubarVisible() override; | 
|  | void setResizable(bool) override; | 
|  | bool shouldReportDetailedMessageForSource(LocalFrame&, const String&) override; | 
|  | void addMessageToConsole( | 
|  | LocalFrame*, MessageSource, MessageLevel, | 
|  | const String& message, unsigned lineNumber, | 
|  | const String& sourceID, const String& stackTrace) override; | 
|  | bool canOpenBeforeUnloadConfirmPanel() override; | 
|  | bool openBeforeUnloadConfirmPanelDelegate(LocalFrame*, bool isReload) override; | 
|  | void closeWindowSoon() override; | 
|  | bool openJavaScriptAlertDelegate(LocalFrame*, const String&) override; | 
|  | bool openJavaScriptConfirmDelegate(LocalFrame*, const String&) override; | 
|  | bool openJavaScriptPromptDelegate( | 
|  | LocalFrame*, const String& message, | 
|  | const String& defaultValue, String& result) override; | 
|  | void setStatusbarText(const String& message) override; | 
|  | bool tabsToLinks() override; | 
|  | IntRect windowResizerRect() const override; | 
|  | void invalidateRect(const IntRect&) override; | 
|  | void scheduleAnimation(Widget*) override; | 
|  | IntRect viewportToScreen(const IntRect&, const Widget*) const override; | 
|  | float windowToViewportScalar(const float) const override; | 
|  | WebScreenInfo screenInfo() const override; | 
|  | void contentsSizeChanged(LocalFrame*, const IntSize&) const override; | 
|  | void pageScaleFactorChanged() const override; | 
|  | float clampPageScaleFactorToLimits(float scale) const override; | 
|  | void layoutUpdated(LocalFrame*) const override; | 
|  | void showMouseOverURL(const HitTestResult&) override; | 
|  | void setToolTip(const String& tooltipText, TextDirection) override; | 
|  | void dispatchViewportPropertiesDidChange(const ViewportDescription&) const override; | 
|  | void printDelegate(LocalFrame*) override; | 
|  | void annotatedRegionsChanged() override; | 
|  | ColorChooser* openColorChooser(LocalFrame*, ColorChooserClient*, const Color&) override; | 
|  | DateTimeChooser* openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) override; | 
|  | void openFileChooser(LocalFrame*, PassRefPtr<FileChooser>) override; | 
|  | void enumerateChosenDirectory(FileChooser*) override; | 
|  | void setCursor(const Cursor&, LocalFrame* localRoot) override; | 
|  | Cursor lastSetCursorForTesting() const override; | 
|  | void setEventListenerProperties(WebEventListenerClass, WebEventListenerProperties) override; | 
|  | WebEventListenerProperties eventListenerProperties(WebEventListenerClass) const override; | 
|  | void setHasScrollEventHandlers(bool hasEventHandlers) override; | 
|  | bool hasScrollEventHandlers() const override; | 
|  | void setTouchAction(TouchAction) override; | 
|  |  | 
|  | // Pass 0 as the GraphicsLayer to detatch the root layer. | 
|  | void attachRootGraphicsLayer(GraphicsLayer*, LocalFrame* localRoot) override; | 
|  |  | 
|  | void didPaint(const PaintArtifact&) override; | 
|  |  | 
|  | void attachCompositorAnimationTimeline(CompositorAnimationTimeline*, LocalFrame* localRoot) override; | 
|  | void detachCompositorAnimationTimeline(CompositorAnimationTimeline*, LocalFrame* localRoot) override; | 
|  |  | 
|  | void enterFullScreenForElement(Element*) override; | 
|  | void exitFullScreenForElement(Element*) override; | 
|  |  | 
|  | void clearCompositedSelection() override; | 
|  | void updateCompositedSelection(const CompositedSelection&) override; | 
|  |  | 
|  | // ChromeClient methods: | 
|  | void postAccessibilityNotification(AXObject*, AXObjectCache::AXNotification) override; | 
|  | String acceptLanguages() override; | 
|  |  | 
|  | // ChromeClientImpl: | 
|  | void setCursorForPlugin(const WebCursorInfo&, LocalFrame* localRoot); | 
|  | void setNewWindowNavigationPolicy(WebNavigationPolicy); | 
|  | void setCursorOverridden(bool); | 
|  |  | 
|  | bool hasOpenedPopup() const override; | 
|  | PopupMenu* openPopupMenu(LocalFrame&, HTMLSelectElement&) override; | 
|  | PagePopup* openPagePopup(PagePopupClient*); | 
|  | void closePagePopup(PagePopup*); | 
|  | DOMWindow* pagePopupWindowForTesting() const override; | 
|  |  | 
|  | bool shouldOpenModalDialogDuringPageDismissal(const DialogType&, const String& dialogMessage, Document::PageDismissalType) const override; | 
|  |  | 
|  | bool requestPointerLock() override; | 
|  | void requestPointerUnlock() override; | 
|  |  | 
|  | // AutofillClient pass throughs: | 
|  | void didAssociateFormControls(const HeapVector<Member<Element>>&, LocalFrame*) override; | 
|  | void handleKeyboardEventOnTextField(HTMLInputElement&, KeyboardEvent&) override; | 
|  | void didChangeValueInTextField(HTMLFormControlElement&) override; | 
|  | void didEndEditingOnTextField(HTMLInputElement&) override; | 
|  | void openTextDataListChooser(HTMLInputElement&) override; | 
|  | void textFieldDataListChanged(HTMLInputElement&) override; | 
|  | void ajaxSucceeded(LocalFrame*) override; | 
|  |  | 
|  | void didCancelCompositionOnSelectionChange() override; | 
|  | void willSetInputMethodState() override; | 
|  | void didUpdateTextOfFocusedElementByNonUserInput() override; | 
|  | void showImeIfNeeded() override; | 
|  |  | 
|  | void registerViewportLayers() const override; | 
|  |  | 
|  | void showUnhandledTapUIIfNeeded(IntPoint, Node*, bool) override; | 
|  | void onMouseDown(Node*) override; | 
|  | void didUpdateTopControls() const override; | 
|  |  | 
|  | FloatSize elasticOverscroll() const override; | 
|  |  | 
|  | void didObserveNonGetFetchFromScript() const override; | 
|  |  | 
|  | PassOwnPtr<WebFrameScheduler> createFrameScheduler(BlameContext*) override; | 
|  |  | 
|  | double lastFrameTimeMonotonic() const override; | 
|  |  | 
|  | private: | 
|  | explicit ChromeClientImpl(WebViewImpl*); | 
|  |  | 
|  | bool isChromeClientImpl() const override { return true; } | 
|  | void registerPopupOpeningObserver(PopupOpeningObserver*) override; | 
|  | void unregisterPopupOpeningObserver(PopupOpeningObserver*) override; | 
|  |  | 
|  | void notifyPopupOpeningObservers() const; | 
|  | void setCursor(const WebCursorInfo&, LocalFrame* localRoot); | 
|  |  | 
|  | WebViewImpl* m_webView; // Weak pointer. | 
|  | WindowFeatures m_windowFeatures; | 
|  | Vector<PopupOpeningObserver*> m_popupOpeningObservers; | 
|  | Cursor m_lastSetMouseCursorForTesting; | 
|  | bool m_cursorOverridden; | 
|  | bool m_didRequestNonEmptyToolTip; | 
|  | }; | 
|  |  | 
|  | DEFINE_TYPE_CASTS(ChromeClientImpl, ChromeClient, client, client->isChromeClientImpl(), client.isChromeClientImpl()); | 
|  |  | 
|  | } // namespace blink | 
|  |  | 
|  | #endif |