Home | History | Annotate | Download | only in WebCoreSupport
      1 /*
      2  * Copyright 2007, The Android Open Source Project
      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  *  * Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  *  * 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 THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef ChromeClientAndroid_h
     27 #define ChromeClientAndroid_h
     28 
     29 #include "ChromeClient.h"
     30 
     31 #include "PopupMenu.h"
     32 #include "SearchPopupMenu.h"
     33 #include "Timer.h"
     34 #include <wtf/PassRefPtr.h>
     35 #include <wtf/Threading.h>
     36 
     37 namespace WebCore {
     38 class PopupMenuClient;
     39 class Geolocation;
     40 }
     41 
     42 using namespace WebCore;
     43 
     44 namespace android {
     45     class WebFrame;
     46 
     47     class ChromeClientAndroid : public ChromeClient {
     48     public:
     49         ChromeClientAndroid() : m_webFrame(0)
     50 #if USE(ACCELERATED_COMPOSITING)
     51                               , m_rootGraphicsLayer(0)
     52                               , m_needsLayerSync(false)
     53 #endif
     54                               , m_triedToReclaimDBQuota(false)
     55                               { }
     56         virtual void chromeDestroyed();
     57 
     58         virtual void setWindowRect(const FloatRect&);
     59         virtual FloatRect windowRect();
     60 
     61         virtual FloatRect pageRect();
     62 
     63         virtual float scaleFactor();
     64 
     65         virtual void focus();
     66         virtual void unfocus();
     67         virtual void formDidBlur(const WebCore::Node*);
     68         virtual bool canTakeFocus(FocusDirection);
     69         virtual void takeFocus(FocusDirection);
     70 
     71         virtual void focusedNodeChanged(Node*);
     72         virtual void focusedFrameChanged(Frame*);
     73 
     74         // The Frame pointer provides the ChromeClient with context about which
     75         // Frame wants to create the new Page.  Also, the newly created window
     76         // should not be shown to the user until the ChromeClient of the newly
     77         // created Page has its show method called.
     78         virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&);
     79         virtual void show();
     80 
     81         virtual bool canRunModal();
     82         virtual void runModal();
     83 
     84         virtual void setToolbarsVisible(bool);
     85         virtual bool toolbarsVisible();
     86 
     87         virtual void setStatusbarVisible(bool);
     88         virtual bool statusbarVisible();
     89 
     90         virtual void setScrollbarsVisible(bool);
     91         virtual bool scrollbarsVisible();
     92 
     93         virtual void setMenubarVisible(bool);
     94         virtual bool menubarVisible();
     95 
     96         virtual void setResizable(bool);
     97 
     98         virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, unsigned int lineNumber, const String& sourceID);
     99 
    100         virtual bool canRunBeforeUnloadConfirmPanel();
    101         virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame);
    102 
    103         virtual void closeWindowSoon();
    104 
    105         virtual void runJavaScriptAlert(Frame*, const String&);
    106         virtual bool runJavaScriptConfirm(Frame*, const String&);
    107         virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result);
    108         virtual void setStatusbarText(const String&);
    109         virtual bool shouldInterruptJavaScript();
    110         virtual KeyboardUIMode keyboardUIMode();
    111 
    112         virtual IntRect windowResizerRect() const;
    113 
    114         // Methods used by HostWindow.
    115         virtual void invalidateWindow(const WebCore::IntRect&, bool);
    116         virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool);
    117         virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool);
    118         virtual void scroll(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
    119         virtual IntPoint screenToWindow(const IntPoint&) const;
    120         virtual IntRect windowToScreen(const IntRect&) const;
    121         virtual PlatformPageClient platformPageClient() const;
    122         virtual void contentsSizeChanged(Frame*, const IntSize&) const;
    123         virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const;
    124         // End methods used by HostWindow.
    125 
    126         virtual void dispatchViewportDataDidChange(const ViewportArguments&) const;
    127 
    128         virtual void scrollbarsModeDidChange() const;
    129         virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned int);
    130 
    131         virtual void setToolTip(const String&, TextDirection);
    132 
    133         virtual void print(Frame*);
    134 #if ENABLE(DATABASE)
    135         virtual void exceededDatabaseQuota(Frame*, const String&);
    136 #endif
    137 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
    138         virtual void reachedMaxAppCacheSize(int64_t spaceNeeded);
    139         virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*);
    140 #endif
    141 
    142 	virtual void populateVisitedLinks();
    143 
    144 #if ENABLE(TOUCH_EVENTS)
    145         virtual void needTouchEvents(bool);
    146 #endif
    147 
    148         // Methods used to request and provide Geolocation permissions.
    149         // Not used with client-based Geolocation
    150         virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) { ASSERT_NOT_REACHED(); }
    151         virtual void cancelGeolocationPermissionRequestForFrame(WebCore::Frame*, WebCore::Geolocation*) { ASSERT_NOT_REACHED(); }
    152 
    153         virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>);
    154         virtual void setCursor(const Cursor&);
    155         virtual void chooseIconForFiles(const WTF::Vector<WTF::String>&, FileChooser*);
    156 
    157         // Notification that the given form element has changed. This function
    158         // will be called frequently, so handling should be very fast.
    159         virtual void formStateDidChange(const Node*);
    160 
    161         // Android-specific
    162         void setWebFrame(android::WebFrame* webframe);
    163         android::WebFrame* webFrame() { return m_webFrame; }
    164         void wakeUpMainThreadWithNewQuota(long long newQuota);
    165 
    166 #if USE(ACCELERATED_COMPOSITING)
    167         virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer* g);
    168         virtual void setNeedsOneShotDrawingSynchronization();
    169         virtual void scheduleCompositingLayerSync();
    170         virtual bool allowsAcceleratedCompositing() const { return true; }
    171         WebCore::GraphicsLayer* layersSync();
    172 #endif
    173 
    174         virtual bool selectItemWritingDirectionIsNatural();
    175         virtual bool selectItemAlignmentFollowsMenuWritingDirection();
    176         virtual PassRefPtr<WebCore::PopupMenu> createPopupMenu(WebCore::PopupMenuClient*) const;
    177         virtual PassRefPtr<WebCore::SearchPopupMenu> createSearchPopupMenu(WebCore::PopupMenuClient*) const;
    178 
    179 #if ENABLE(CONTEXT_MENUS)
    180         virtual void showContextMenu();
    181 #endif
    182 
    183 #if ENABLE(FULLSCREEN_API)
    184         virtual void exitFullScreenForElement(Element*);
    185 #endif
    186 
    187 #if ENABLE(VIDEO)
    188         virtual bool supportsFullscreenForNode(const WebCore::Node*);
    189         virtual void enterFullscreenForNode(WebCore::Node*);
    190         virtual void exitFullscreenForNode(WebCore::Node*);
    191 #endif
    192 
    193         virtual void* webView() const { return 0; }
    194 
    195     private:
    196         android::WebFrame* m_webFrame;
    197 #if USE(ACCELERATED_COMPOSITING)
    198         WebCore::GraphicsLayer* m_rootGraphicsLayer;
    199         bool m_needsLayerSync;
    200 #endif
    201         WTF::ThreadCondition m_quotaThreadCondition;
    202         WTF::Mutex m_quotaThreadLock;
    203         unsigned long long m_newQuota;
    204         bool m_isNewQuotaSet;
    205         bool m_triedToReclaimDBQuota;
    206     };
    207 
    208 }
    209 
    210 #endif
    211