// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef WEBKIT_GLUE_WEBVIEW_H__ #define WEBKIT_GLUE_WEBVIEW_H__ #include #include "base/basictypes.h" #include "base/ref_counted.h" #include "webkit/glue/webwidget.h" struct WebDropData; struct WebPreferences; class GURL; class WebFrame; class WebViewDelegate; // // @class WebView // WebView manages the interaction between WebFrameViews and WebDataSources. // Modification of the policies and behavior of the WebKit is largely managed // by WebViews and their delegates. // // Typical usage: // // WebView *webView; // WebFrame *mainFrame; // // webView = [[WebView alloc] initWithFrame: NSMakeRect (0,0,640,480)]; // mainFrame = [webView mainFrame]; // [mainFrame loadRequest:request]; // // WebViews have a WebViewDelegate that the embedding application implements // that are required for tasks like opening new windows and controlling the // user interface elements in those windows, monitoring the progress of loads, // monitoring URL changes, and making determinations about how content of // certain types should be handled. class WebView : public WebWidget { public: WebView() {} virtual ~WebView() {} // This method creates a WebView that is initially sized to an empty rect. static WebView* Create(WebViewDelegate* delegate, const WebPreferences& prefs); // Returns the delegate for this WebView. This is the pointer that was // passed to WebView::Create. The caller must check this value before using // it, it will be NULL during closing of the view. virtual WebViewDelegate* GetDelegate() = 0; // Instructs the EditorClient whether to pass editing notifications on to a // delegate, if one is present. This allows embedders that haven't // overridden any editor delegate methods to avoid the performance impact of // calling them. virtual void SetUseEditorDelegate(bool value) = 0; // Method that controls whether pressing Tab key cycles through page elements // or inserts a '\t' char in text area virtual void SetTabKeyCyclesThroughElements(bool value) = 0; // Returns whether the current view can be closed, after running any // onbeforeunload event handlers. virtual bool ShouldClose() = 0; // // @method mainFrame // @abstract Return the top level frame. // @discussion Note that even document that are not framesets will have a // mainFrame. // @result The main frame. // - (WebFrame *)mainFrame; virtual WebFrame* GetMainFrame() = 0; // Returns the currently focused frame. virtual WebFrame* GetFocusedFrame() = 0; // Sets focus to the frame passed in. virtual void SetFocusedFrame(WebFrame* frame) = 0; // Returns the frame with the given name, or NULL if not found. virtual WebFrame* GetFrameWithName(const std::wstring& name) = 0; // Returns the frame previous to the specified frame, by traversing the frame // tree, wrapping around if necessary. virtual WebFrame* GetPreviousFrameBefore(WebFrame* frame, bool wrap) = 0; // Returns the frame after to the specified frame, by traversing the frame // tree, wrapping around if necessary. virtual WebFrame* GetNextFrameAfter(WebFrame* frame, bool wrap) = 0; // ---- TODO(darin): remove from here ---- // // - (IBAction)stopLoading:(id)sender; virtual void StopLoading() = 0; // Sets the maximum size to allow WebCore's internal B/F list to grow to. // If not called, the list will have the default capacity specified in // BackForwardList.cpp. virtual void SetBackForwardListSize(int size) = 0; // ---- TODO(darin): remove to here ---- // Restores focus to the previously focused element. // This method is invoked when the webview is shown after being // hidden, and focus is to be restored. When WebView loses focus, it remembers // the frame/element that had focus, so that when this method is invoked // focus is then restored. virtual void RestoreFocus() = 0; // Focus the first (last if reverse is true) focusable node. virtual void SetInitialFocus(bool reverse) = 0; // Stores the focused node and clears it if |frame| is the focused frame. // TODO(jcampan): http://b/issue?id=1157486 this is needed to work-around // issues caused by the fix for bug #792423 and should be removed when that // bug is fixed. virtual void StoreFocusForFrame(WebFrame* frame) = 0; // Returns whether or not the focused control needs spell-checking. // Currently, this function just retrieves the focused node and determines // whether or not it is a