15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PUBLIC_RENDERER_RENDER_VIEW_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_RENDERER_RENDER_VIEW_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <string> 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/top_controls_state.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_sender.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPageVisibilityState.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WebElement; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebFrame; 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebLocalFrame; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebNode; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebString; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebURLRequest; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebView; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebContextMenuData; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class Point; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Size; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderFrame; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewVisitor; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct SSLStatus; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct WebPreferences; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT RenderView : public IPC::Sender { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the RenderView containing the given WebView. 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static RenderView* FromWebView(blink::WebView* webview); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the RenderView for the given routing ID. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static RenderView* FromRoutingID(int routing_id); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Visit all RenderViews with a live WebView (i.e., RenderViews that have 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been closed but not yet destroyed are excluded). 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ForEach(RenderViewVisitor* visitor); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Applies WebKit related preferences to this view. 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static void ApplyWebPreferences(const WebPreferences& preferences, 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebView* web_view); 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Returns the main RenderFrame. 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual RenderFrame* GetMainRenderFrame() = 0; 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the routing ID of the view. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetRoutingID() const = 0; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the size of the view. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Size GetSize() const = 0; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets WebKit related preferences associated with this view. 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebPreferences& GetWebkitPreferences() = 0; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overrides the WebKit related preferences associated with this view. Note 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that the browser process may update the preferences at any time. 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetWebkitPreferences(const WebPreferences& preferences) = 0; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the associated WebView. May return NULL when the view is closing. 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebView* GetWebView() = 0; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Gets the focused element. If no such element exists then 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // the element will be Null. 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual blink::WebElement GetFocusedElement() const = 0; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the parameter node is a textfield, text area, a content 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // editable div, or has an ARIA role of textbox. 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool IsEditableNode(const blink::WebNode& node) const = 0; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns true if a hit test for |point| returns a descendant of |node|. 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool NodeContainsPoint(const blink::WebNode& node, 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Point& point) const = 0; 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if we should display scrollbars for the given view size and 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // false if the scrollbars should be hidden. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldDisplayScrollbars(int width, int height) const = 0; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bitwise-ORed set of extra bindings that have been enabled. See 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BindingsPolicy for details. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetEnabledBindings() const = 0; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether content state (such as form state, scroll position and page 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // contents) should be sent to the browser immediately. This is normally 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // false, but set to true by some tests. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetContentStateImmediately() const = 0; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the current visibility of the WebView. 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebPageVisibilityState GetVisibilityState() const = 0; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Used by plugins that load data in this RenderView to update the loading 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // notifications. 106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void DidStartLoading() = 0; 107ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void DidStopLoading() = 0; 108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the renderer that a paint is to be generated for the size 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // passed in. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Repaint(const gfx::Size& size) = 0; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inject edit commands to be used for the next keyboard event. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetEditCommandForNextKeyEvent(const std::string& name, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) = 0; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ClearEditCommands() = 0; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns a collection of security info about |frame|. 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual SSLStatus GetSSLStatusOfFrame(blink::WebFrame* frame) const = 0; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Returns |renderer_preferences_.accept_languages| value. 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual const std::string& GetAcceptLanguages() const = 0; 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void UpdateTopControlsState(TopControlsState constraints, 12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) TopControlsState current, 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool animate) = 0; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RenderView() {} 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This interface should only be implemented inside content. 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class RenderViewImpl; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderView() {} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_RENDERER_RENDER_VIEW_H_ 142