Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: webkit/api/src/WebFrameImpl.h

Issue 341030: Moves webview_impl.cc, webframe_impl.cc and webframeloaderclient_impl.cc into... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/api/src/InspectorClientImpl.cpp ('k') | webkit/api/src/WebFrameImpl.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions are
6 * are met: 6 * met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. 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 * 7 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 8 * * Redistributions of source code must retain the above copyright
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 9 * notice, this list of conditions and the following disclaimer.
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 10 * * Redistributions in binary form must reproduce the above
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 11 * copyright notice, this list of conditions and the following disclaimer
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 12 * in the documentation and/or other materials provided with the
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 13 * distribution.
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 14 * * Neither the name of Google Inc. nor the names of its
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 15 * contributors may be used to endorse or promote products derived from
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (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. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 29 */
25 30
26 #ifndef WEBKIT_GLUE_WEBFRAME_IMPL_H_ 31 #ifndef WebFrameImpl_h
27 #define WEBKIT_GLUE_WEBFRAME_IMPL_H_ 32 #define WebFrameImpl_h
28 33
29 #include "Frame.h" 34 #include "Frame.h"
35 #include "FrameLoaderClientImpl.h"
30 #include "PlatformString.h" 36 #include "PlatformString.h"
37 // FIXME: remove this relative path once consumers from glue are removed.
38 #include "../public/WebFrame.h"
31 #include <wtf/OwnPtr.h> 39 #include <wtf/OwnPtr.h>
32 #include <wtf/RefCounted.h> 40 #include <wtf/RefCounted.h>
33 41
34 #include "webkit/api/public/WebFrame.h"
35 #include "webkit/glue/webframeloaderclient_impl.h"
36
37 class ChromePrintContext;
38 class WebViewImpl;
39
40 namespace gfx {
41 class BitmapPlatformDevice;
42 }
43
44 namespace WebCore { 42 namespace WebCore {
45 class HistoryItem; 43 class HistoryItem;
46 class KURL; 44 class KURL;
47 class Node; 45 class Node;
48 class Range; 46 class Range;
49 class SubstituteData; 47 class SubstituteData;
50 struct WindowFeatures; 48 struct WindowFeatures;
51 } 49 }
52 50
53 namespace WebKit { 51 namespace WebKit {
52 class ChromePrintContext;
54 class PasswordAutocompleteListener; 53 class PasswordAutocompleteListener;
55 class WebDataSourceImpl; 54 class WebDataSourceImpl;
56 class WebFrameClient; 55 class WebFrameClient;
57 class WebView; 56 class WebView;
58 } 57 class WebViewImpl;
59 58
60 // Implementation of WebFrame, note that this is a reference counted object. 59 // Implementation of WebFrame, note that this is a reference counted object.
61 class WebFrameImpl : public WebKit::WebFrame, public RefCounted<WebFrameImpl> { 60 class WebFrameImpl : public WebFrame, public RefCounted<WebFrameImpl> {
62 public: 61 public:
63 // WebFrame methods: 62 // WebFrame methods:
64 virtual WebKit::WebString name() const; 63 virtual WebString name() const;
65 virtual WebKit::WebURL url() const; 64 virtual WebURL url() const;
66 virtual WebKit::WebURL favIconURL() const; 65 virtual WebURL favIconURL() const;
67 virtual WebKit::WebURL openSearchDescriptionURL() const; 66 virtual WebURL openSearchDescriptionURL() const;
68 virtual WebKit::WebSize scrollOffset() const; 67 virtual WebSize scrollOffset() const;
69 virtual WebKit::WebSize contentsSize() const; 68 virtual WebSize contentsSize() const;
70 virtual int contentsPreferredWidth() const; 69 virtual int contentsPreferredWidth() const;
71 virtual bool hasVisibleContent() const; 70 virtual bool hasVisibleContent() const;
72 virtual WebKit::WebView* view() const; 71 virtual WebView* view() const;
73 virtual WebKit::WebFrame* opener() const; 72 virtual WebFrame* opener() const;
74 virtual WebKit::WebFrame* parent() const; 73 virtual WebFrame* parent() const;
75 virtual WebKit::WebFrame* top() const; 74 virtual WebFrame* top() const;
76 virtual WebKit::WebFrame* firstChild() const; 75 virtual WebFrame* firstChild() const;
77 virtual WebKit::WebFrame* lastChild() const; 76 virtual WebFrame* lastChild() const;
78 virtual WebKit::WebFrame* nextSibling() const; 77 virtual WebFrame* nextSibling() const;
79 virtual WebKit::WebFrame* previousSibling() const; 78 virtual WebFrame* previousSibling() const;
80 virtual WebKit::WebFrame* traverseNext(bool wrap) const; 79 virtual WebFrame* traverseNext(bool wrap) const;
81 virtual WebKit::WebFrame* traversePrevious(bool wrap) const; 80 virtual WebFrame* traversePrevious(bool wrap) const;
82 virtual WebKit::WebFrame* findChildByName(const WebKit::WebString& name) const; 81 virtual WebFrame* findChildByName(const WebString&) const;
83 virtual WebKit::WebFrame* findChildByExpression( 82 virtual WebFrame* findChildByExpression(const WebString&) const;
84 const WebKit::WebString& xpath) const; 83 virtual void forms(WebVector<WebForm>&) const;
85 virtual void forms(WebKit::WebVector<WebKit::WebForm>&) const; 84 virtual WebSecurityOrigin securityOrigin() const;
86 virtual WebKit::WebSecurityOrigin securityOrigin() const; 85 virtual void grantUniversalAccess();
87 virtual void grantUniversalAccess(); 86 virtual NPObject* windowObject() const;
88 virtual NPObject* windowObject() const; 87 virtual void bindToWindowObject(const WebString& name, NPObject*);
89 virtual void bindToWindowObject( 88 virtual void executeScript(const WebScriptSource&);
90 const WebKit::WebString& name, NPObject* object); 89 virtual void executeScriptInNewContext(
91 virtual void executeScript(const WebKit::WebScriptSource&); 90 const WebScriptSource* sources, unsigned numSources, int extensionGroup);
92 virtual void executeScriptInNewContext( 91 virtual void executeScriptInIsolatedWorld(
93 const WebKit::WebScriptSource* sources, unsigned num_sources, 92 int worldId, const WebScriptSource* sources, unsigned numSources,
94 int extension_group); 93 int extensionGroup);
95 virtual void executeScriptInIsolatedWorld( 94 virtual void addMessageToConsole(const WebConsoleMessage&);
96 int world_id, const WebKit::WebScriptSource* sources, 95 virtual void collectGarbage();
97 unsigned num_sources, int extension_group);
98 virtual void addMessageToConsole(const WebKit::WebConsoleMessage&);
99 virtual void collectGarbage();
100 #if WEBKIT_USING_V8 96 #if WEBKIT_USING_V8
101 virtual v8::Local<v8::Context> mainWorldScriptContext() const; 97 virtual v8::Local<v8::Context> mainWorldScriptContext() const;
102 #endif 98 #endif
103 virtual bool insertStyleText( 99 virtual bool insertStyleText(const WebString& css, const WebString& id);
104 const WebKit::WebString& css, const WebKit::WebString& id); 100 virtual void reload();
105 virtual void reload(); 101 virtual void loadRequest(const WebURLRequest&);
106 virtual void loadRequest(const WebKit::WebURLRequest& request); 102 virtual void loadHistoryItem(const WebHistoryItem&);
107 virtual void loadHistoryItem(const WebKit::WebHistoryItem& history_item); 103 virtual void loadData(
108 virtual void loadData( 104 const WebData&, const WebString& mimeType, const WebString& textEncoding,
109 const WebKit::WebData& data, const WebKit::WebString& mime_type, 105 const WebURL& baseURL, const WebURL& unreachableURL, bool replace);
110 const WebKit::WebString& text_encoding, const WebKit::WebURL& base_url, 106 virtual void loadHTMLString(
111 const WebKit::WebURL& unreachable_url, bool replace); 107 const WebData& html, const WebURL& baseURL, const WebURL& unreachableURL,
112 virtual void loadHTMLString( 108 bool replace);
113 const WebKit::WebData& html, const WebKit::WebURL& base_url, 109 virtual bool isLoading() const;
114 const WebKit::WebURL& unreachable_url, bool replace); 110 virtual void stopLoading();
115 virtual bool isLoading() const; 111 virtual WebDataSource* provisionalDataSource() const;
116 virtual void stopLoading(); 112 virtual WebDataSource* dataSource() const;
117 virtual WebKit::WebDataSource* provisionalDataSource() const; 113 virtual WebHistoryItem previousHistoryItem() const;
118 virtual WebKit::WebDataSource* dataSource() const; 114 virtual WebHistoryItem currentHistoryItem() const;
119 virtual WebKit::WebHistoryItem previousHistoryItem() const; 115 virtual void enableViewSourceMode(bool enable);
120 virtual WebKit::WebHistoryItem currentHistoryItem() const; 116 virtual bool isViewSourceModeEnabled() const;
121 virtual void enableViewSourceMode(bool enable); 117 virtual void setReferrerForRequest(WebURLRequest&, const WebURL& referrer);
122 virtual bool isViewSourceModeEnabled() const; 118 virtual void dispatchWillSendRequest(WebURLRequest&);
123 virtual void setReferrerForRequest( 119 virtual void commitDocumentData(const char* data, size_t length);
124 WebKit::WebURLRequest& request, const WebKit::WebURL& referrer); 120 virtual unsigned unloadListenerCount() const;
125 virtual void dispatchWillSendRequest(WebKit::WebURLRequest& request); 121 virtual bool isProcessingUserGesture() const;
126 virtual void commitDocumentData(const char* data, size_t length); 122 virtual bool willSuppressOpenerInNewFrame() const;
127 virtual unsigned unloadListenerCount() const; 123 virtual void replaceSelection(const WebString&);
128 virtual bool isProcessingUserGesture() const; 124 virtual void insertText(const WebString&);
129 virtual bool willSuppressOpenerInNewFrame() const; 125 virtual void setMarkedText(const WebString&, unsigned location, unsigned length);
130 virtual void replaceSelection(const WebKit::WebString& text); 126 virtual void unmarkText();
131 virtual void insertText(const WebKit::WebString& text); 127 virtual bool hasMarkedText() const;
132 virtual void setMarkedText( 128 virtual WebRange markedRange() const;
133 const WebKit::WebString& text, unsigned location, unsigned length); 129 virtual bool executeCommand(const WebString&);
134 virtual void unmarkText(); 130 virtual bool executeCommand(const WebString&, const WebString& value);
135 virtual bool hasMarkedText() const; 131 virtual bool isCommandEnabled(const WebString&) const;
136 virtual WebKit::WebRange markedRange() const; 132 virtual void enableContinuousSpellChecking(bool);
137 virtual bool executeCommand(const WebKit::WebString& command); 133 virtual bool isContinuousSpellCheckingEnabled() const;
138 virtual bool executeCommand( 134 virtual bool hasSelection() const;
139 const WebKit::WebString& command, const WebKit::WebString& value); 135 virtual WebRange selectionRange() const;
140 virtual bool isCommandEnabled(const WebKit::WebString& command) const; 136 virtual WebString selectionAsText() const;
141 virtual void enableContinuousSpellChecking(bool enable); 137 virtual WebString selectionAsMarkup() const;
142 virtual bool isContinuousSpellCheckingEnabled() const; 138 virtual int printBegin(const WebSize& pageSize);
143 virtual bool hasSelection() const; 139 virtual float printPage(int pageToPrint, WebCanvas*);
144 virtual WebKit::WebRange selectionRange() const; 140 virtual float getPrintPageShrink(int page);
145 virtual WebKit::WebString selectionAsText() const; 141 virtual void printEnd();
146 virtual WebKit::WebString selectionAsMarkup() const; 142 virtual bool find(
147 virtual int printBegin(const WebKit::WebSize& page_size); 143 int identifier, const WebString& searchText, const WebFindOptions&,
148 virtual float printPage(int page_to_print, WebKit::WebCanvas* canvas); 144 bool wrapWithinFrame, WebRect* selectionRect);
149 virtual float getPrintPageShrink(int page); 145 virtual void stopFinding(bool clearSelection);
150 virtual void printEnd(); 146 virtual void scopeStringMatches(
151 virtual bool find( 147 int identifier, const WebString& searchText, const WebFindOptions&,
152 int identifier, const WebKit::WebString& search_text, 148 bool reset);
153 const WebKit::WebFindOptions& options, bool wrap_within_frame, 149 virtual void cancelPendingScopingEffort();
154 WebKit::WebRect* selection_rect); 150 virtual void increaseMatchCount(int count, int identifier);
155 virtual void stopFinding(bool clear_selection); 151 virtual void resetMatchCount();
156 virtual void scopeStringMatches( 152 virtual WebURL completeURL(const WebString& url) const;
157 int identifier, const WebKit::WebString& search_text, 153 virtual WebString contentAsText(size_t maxChars) const;
158 const WebKit::WebFindOptions& options, bool reset); 154 virtual WebString contentAsMarkup() const;
159 virtual void cancelPendingScopingEffort(); 155
160 virtual void increaseMatchCount(int count, int identifier); 156 static PassRefPtr<WebFrameImpl> create(WebFrameClient* client);
161 virtual void resetMatchCount(); 157 ~WebFrameImpl();
162 virtual WebKit::WebURL completeURL(const WebKit::WebString& url) const; 158
163 virtual WebKit::WebString contentAsText(size_t max_chars) const; 159 static int liveObjectCount() {
164 virtual WebKit::WebString contentAsMarkup() const; 160 return m_liveObjectCount;
165
166 static PassRefPtr<WebFrameImpl> create(WebKit::WebFrameClient* client);
167 ~WebFrameImpl();
168
169 static int live_object_count() {
170 return live_object_count_;
171 }
172
173 // Called by the WebViewImpl to initialize its main frame:
174 void InitMainFrame(WebViewImpl* webview_impl);
175
176 PassRefPtr<WebCore::Frame> CreateChildFrame(
177 const WebCore::FrameLoadRequest&,
178 WebCore::HTMLFrameOwnerElement* owner_element);
179
180 void Layout();
181 void Paint(WebKit::WebCanvas* canvas, const WebKit::WebRect& rect);
182
183 void CreateFrameView();
184
185 WebCore::Frame* frame() const {
186 return frame_;
187 }
188
189 static WebFrameImpl* FromFrame(WebCore::Frame* frame);
190
191 WebViewImpl* GetWebViewImpl() const;
192
193 WebCore::FrameView* frameview() const {
194 return frame_ ? frame_->view() : NULL;
195 }
196
197 // Getters for the impls corresponding to Get(Provisional)DataSource. They
198 // may return NULL if there is no corresponding data source.
199 WebKit::WebDataSourceImpl* GetDataSourceImpl() const;
200 WebKit::WebDataSourceImpl* GetProvisionalDataSourceImpl() const;
201
202 // Returns which frame has an active match. This function should only be
203 // called on the main frame, as it is the only frame keeping track. Returned
204 // value can be NULL if no frame has an active match.
205 const WebFrameImpl* active_match_frame() const {
206 return active_match_frame_;
207 }
208
209 // When a Find operation ends, we want to set the selection to what was active
210 // and set focus to the first focusable node we find (starting with the first
211 // node in the matched range and going up the inheritance chain). If we find
212 // nothing to focus we focus the first focusable node in the range. This
213 // allows us to set focus to a link (when we find text inside a link), which
214 // allows us to navigate by pressing Enter after closing the Find box.
215 void SetFindEndstateFocusAndSelection();
216
217 void DidFail(const WebCore::ResourceError& error, bool was_provisional);
218
219 // Sets whether the WebFrameImpl allows its document to be scrolled.
220 // If the parameter is true, allow the document to be scrolled.
221 // Otherwise, disallow scrolling.
222 void SetAllowsScrolling(bool flag);
223
224 // Registers a listener for the specified user name input element. The
225 // listener will receive notifications for blur and when autocomplete should
226 // be triggered.
227 // The WebFrameImpl becomes the owner of the passed listener.
228 void RegisterPasswordListener(
229 PassRefPtr<WebCore::HTMLInputElement> user_name_input_element,
230 WebKit::PasswordAutocompleteListener* listener);
231
232 // Returns the password autocomplete listener associated with the passed
233 // user name input element, or NULL if none available.
234 // Note that the returned listener is owner by the WebFrameImpl and should not
235 // be kept around as it is deleted when the page goes away.
236 WebKit::PasswordAutocompleteListener* GetPasswordListener(
237 WebCore::HTMLInputElement* user_name_input_element);
238
239 WebKit::WebFrameClient* client() const { return client_handle_->client(); }
240 void drop_client() { client_handle_->drop_client(); }
241
242 protected:
243 friend class WebFrameLoaderClient;
244
245 // A weak reference to the WebFrameClient. Each WebFrame in the hierarchy
246 // owns a reference to a ClientHandle. When the main frame is destroyed, it
247 // clears the WebFrameClient.
248 class ClientHandle : public RefCounted<ClientHandle> {
249 public:
250 static PassRefPtr<ClientHandle> create(WebKit::WebFrameClient* client) {
251 return adoptRef(new ClientHandle(client));
252 } 161 }
253 WebKit::WebFrameClient* client() { return client_; } 162
254 void drop_client() { client_ = NULL; } 163 // Called by the WebViewImpl to initialize its main frame:
255 private: 164 void initializeAsMainFrame(WebViewImpl*);
256 ClientHandle(WebKit::WebFrameClient* client) : client_(client) {} 165
257 WebKit::WebFrameClient* client_; 166 PassRefPtr<WebCore::Frame> createChildFrame(
258 }; 167 const WebCore::FrameLoadRequest&, WebCore::HTMLFrameOwnerElement*);
259 168
260 WebFrameImpl(PassRefPtr<ClientHandle> client_handle); 169 void layout();
261 170 void paint(WebCanvas*, const WebRect&);
262 // Informs the WebFrame that the Frame is being closed, called by the 171 void createFrameView();
263 // WebFrameLoaderClient 172
264 void Closing(); 173 static WebFrameImpl* fromFrame(WebCore::Frame* frame);
265 174
266 // Used to check for leaks of this object. 175 WebViewImpl* viewImpl() const;
267 static int live_object_count_; 176
268 177 WebCore::Frame* frame() const { return m_frame; }
269 WebFrameLoaderClient frame_loader_client_; 178 WebCore::FrameView* frameView() const { return m_frame ? m_frame->view() : 0; }
270 179
271 RefPtr<ClientHandle> client_handle_; 180 // Getters for the impls corresponding to Get(Provisional)DataSource. They
272 181 // may return NULL if there is no corresponding data source.
273 // This is a weak pointer to our corresponding WebCore frame. A reference to 182 WebDataSourceImpl* dataSourceImpl() const;
274 // ourselves is held while frame_ is valid. See our Closing method. 183 WebDataSourceImpl* provisionalDataSourceImpl() const;
275 WebCore::Frame* frame_; 184
276 185 // Returns which frame has an active match. This function should only be
277 // A way for the main frame to keep track of which frame has an active 186 // called on the main frame, as it is the only frame keeping track. Returned
278 // match. Should be NULL for all other frames. 187 // value can be NULL if no frame has an active match.
279 WebFrameImpl* active_match_frame_; 188 const WebFrameImpl* activeMatchFrame() const { return m_activeMatchFrame; }
280 189
281 // The range of the active match for the current frame. 190 // When a Find operation ends, we want to set the selection to what was active
282 RefPtr<WebCore::Range> active_match_; 191 // and set focus to the first focusable node we find (starting with the first
283 192 // node in the matched range and going up the inheritance chain). If we find
284 // The index of the active match. 193 // nothing to focus we focus the first focusable node in the range. This
285 int active_match_index_; 194 // allows us to set focus to a link (when we find text inside a link), which
286 195 // allows us to navigate by pressing Enter after closing the Find box.
287 // This flag is used by the scoping effort to determine if we need to figure 196 void setFindEndstateFocusAndSelection();
288 // out which rectangle is the active match. Once we find the active 197
289 // rectangle we clear this flag. 198 void didFail(const WebCore::ResourceError&, bool wasProvisional);
290 bool locating_active_rect_; 199
291 200 // Sets whether the WebFrameImpl allows its document to be scrolled.
292 // The scoping effort can time out and we need to keep track of where we 201 // If the parameter is true, allow the document to be scrolled.
293 // ended our last search so we can continue from where we left of. 202 // Otherwise, disallow scrolling.
294 RefPtr<WebCore::Range> resume_scoping_from_range_; 203 void setAllowsScrolling(bool);
295 204
296 // Keeps track of the last string this frame searched for. This is used for 205 // Registers a listener for the specified user name input element. The
297 // short-circuiting searches in the following scenarios: When a frame has 206 // listener will receive notifications for blur and when autocomplete should
298 // been searched and returned 0 results, we don't need to search that frame 207 // be triggered.
299 // again if the user is just adding to the search (making it more specific). 208 // The WebFrameImpl becomes the owner of the passed listener.
300 string16 last_search_string_; 209 void registerPasswordListener(
301 210 PassRefPtr<WebCore::HTMLInputElement>,
302 // Keeps track of how many matches this frame has found so far, so that we 211 PasswordAutocompleteListener*);
303 // don't loose count between scoping efforts, and is also used (in conjunction 212
304 // with last_search_string_ and scoping_complete_) to figure out if we need to 213 // Returns the password autocomplete listener associated with the passed
305 // search the frame again. 214 // user name input element, or NULL if none available.
306 int last_match_count_; 215 // Note that the returned listener is owner by the WebFrameImpl and should not
307 216 // be kept around as it is deleted when the page goes away.
308 // This variable keeps a cumulative total of matches found so far for ALL the 217 PasswordAutocompleteListener* getPasswordListener(WebCore::HTMLInputElement*);
309 // frames on the page, and is only incremented by calling IncreaseMatchCount 218
310 // (on the main frame only). It should be -1 for all other frames. 219 WebFrameClient* client() const { return m_clientHandle->client(); }
311 size_t total_matchcount_; 220 void dropClient() { m_clientHandle->dropClient(); }
312 221
313 // This variable keeps a cumulative total of how many frames are currently 222 private:
314 // scoping, and is incremented/decremented on the main frame only. 223 class DeferredScopeStringMatches;
315 // It should be -1 for all other frames. 224 friend class DeferredScopeStringMatches;
316 int frames_scoping_count_; 225 friend class FrameLoaderClientImpl;
317 226
318 // Keeps track of whether the scoping effort was completed (the user may 227 // A weak reference to the WebFrameClient. Each WebFrame in the hierarchy
319 // interrupt it before it completes by submitting a new search). 228 // owns a reference to a ClientHandle. When the main frame is destroyed, it
320 bool scoping_complete_; 229 // clears the WebFrameClient.
321 230 class ClientHandle : public RefCounted<ClientHandle> {
322 // Keeps track of when the scoping effort should next invalidate the scrollbar 231 public:
323 // and the frame area. 232 static PassRefPtr<ClientHandle> create(WebFrameClient* client)
324 int next_invalidate_after_; 233 {
325 234 return adoptRef(new ClientHandle(client));
326 private: 235 }
327 class DeferredScopeStringMatches; 236 WebFrameClient* client() { return m_client; }
328 friend class DeferredScopeStringMatches; 237 void dropClient() { m_client = NULL; }
329 238 private:
330 // A bit mask specifying area of the frame to invalidate. 239 ClientHandle(WebFrameClient* client) : m_client(client) {}
331 enum AreaToInvalidate { 240 WebFrameClient* m_client;
332 INVALIDATE_NOTHING = 0, 241 };
333 INVALIDATE_CONTENT_AREA = 1, 242
334 INVALIDATE_SCROLLBAR = 2, // vertical scrollbar only. 243 // A bit mask specifying area of the frame to invalidate.
335 INVALIDATE_ALL = 3 // both content area and the scrollbar. 244 enum AreaToInvalidate {
336 }; 245 InvalidateNothing,
337 246 InvalidateContentArea,
338 // Notifies the delegate about a new selection rect. 247 InvalidateScrollbar, // Vertical scrollbar only.
339 void ReportFindInPageSelection( 248 InvalidateAll // Both content area and the scrollbar.
340 const WebKit::WebRect& selection_rect, int active_match_ordinal, 249 };
341 int identifier); 250
342 251 WebFrameImpl(PassRefPtr<ClientHandle>);
343 // Invalidates a certain area within the frame. 252
344 void InvalidateArea(AreaToInvalidate area); 253 // Informs the WebFrame that the Frame is being closed, called by the
345 254 // WebFrameLoaderClient
346 // Add a WebKit TextMatch-highlight marker to nodes in a range. 255 void closing();
347 void AddMarker(WebCore::Range* range, bool active_match); 256
348 257 // Notifies the delegate about a new selection rect.
349 // Sets the markers within a range as active or inactive. 258 void reportFindInPageSelection(
350 void SetMarkerActive(WebCore::Range* range, bool active); 259 const WebRect& selectionRect, int activeMatchOrdinal, int identifier);
351 260
352 // Returns the ordinal of the first match in the frame specified. This 261 // Invalidates a certain area within the frame.
353 // function enumerates the frames, starting with the main frame and up to (but 262 void invalidateArea(AreaToInvalidate);
354 // not including) the frame passed in as a parameter and counts how many 263
355 // matches have been found. 264 // Add a WebKit TextMatch-highlight marker to nodes in a range.
356 int OrdinalOfFirstMatchForFrame(WebFrameImpl* frame) const; 265 void addMarker(WebCore::Range*, bool activeMatch);
357 266
358 // Determines whether the scoping effort is required for a particular frame. 267 // Sets the markers within a range as active or inactive.
359 // It is not necessary if the frame is invisible, for example, or if this 268 void setMarkerActive(WebCore::Range*, bool active);
360 // is a repeat search that already returned nothing last time the same prefix 269
361 // was searched. 270 // Returns the ordinal of the first match in the frame specified. This
362 bool ShouldScopeMatches(const string16& search_text); 271 // function enumerates the frames, starting with the main frame and up to (but
363 272 // not including) the frame passed in as a parameter and counts how many
364 // Queue up a deferred call to scopeStringMatches. 273 // matches have been found.
365 void ScopeStringMatchesSoon( 274 int ordinalOfFirstMatchForFrame(WebFrameImpl*) const;
366 int identifier, const WebKit::WebString& search_text, 275
367 const WebKit::WebFindOptions& options, bool reset); 276 // Determines whether the scoping effort is required for a particular frame.
368 277 // It is not necessary if the frame is invisible, for example, or if this
369 // Called by a DeferredScopeStringMatches instance. 278 // is a repeat search that already returned nothing last time the same prefix
370 void CallScopeStringMatches( 279 // was searched.
371 DeferredScopeStringMatches* deferred, 280 bool shouldScopeMatches(const WebCore::String& searchText);
372 int identifier, const WebKit::WebString& search_text, 281
373 const WebKit::WebFindOptions& options, bool reset); 282 // Queue up a deferred call to scopeStringMatches.
374 283 void scopeStringMatchesSoon(
375 // Determines whether to invalidate the content area and scrollbar. 284 int identifier, const WebString& searchText, const WebFindOptions&,
376 void InvalidateIfNecessary(); 285 bool reset);
377 286
378 // Clears the map of password listeners. 287 // Called by a DeferredScopeStringMatches instance.
379 void ClearPasswordListeners(); 288 void callScopeStringMatches(
380 289 DeferredScopeStringMatches*, int identifier, const WebString& searchText,
381 void LoadJavaScriptURL(const WebCore::KURL& url); 290 const WebFindOptions&, bool reset);
382 291
383 // A list of all of the pending calls to scopeStringMatches. 292 // Determines whether to invalidate the content area and scrollbar.
384 Vector<DeferredScopeStringMatches*> deferred_scoping_work_; 293 void invalidateIfNecessary();
385 294
386 // Valid between calls to BeginPrint() and EndPrint(). Containts the print 295 // Clears the map of password listeners.
387 // information. Is used by PrintPage(). 296 void clearPasswordListeners();
388 OwnPtr<ChromePrintContext> print_context_; 297
389 298 void loadJavaScriptURL(const WebCore::KURL&);
390 // The input fields that are interested in edit events and their associated 299
391 // listeners. 300 // Used to check for leaks of this object.
392 typedef HashMap<RefPtr<WebCore::HTMLInputElement>, 301 static int m_liveObjectCount;
393 WebKit::PasswordAutocompleteListener*> PasswordListenerMap; 302
394 PasswordListenerMap password_listeners_; 303 FrameLoaderClientImpl m_frameLoaderClient;
304
305 RefPtr<ClientHandle> m_clientHandle;
306
307 // This is a weak pointer to our corresponding WebCore frame. A reference to
308 // ourselves is held while frame_ is valid. See our Closing method.
309 WebCore::Frame* m_frame;
310
311 // A way for the main frame to keep track of which frame has an active
312 // match. Should be NULL for all other frames.
313 WebFrameImpl* m_activeMatchFrame;
314
315 // The range of the active match for the current frame.
316 RefPtr<WebCore::Range> m_activeMatch;
317
318 // The index of the active match.
319 int m_activeMatchIndex;
320
321 // This flag is used by the scoping effort to determine if we need to figure
322 // out which rectangle is the active match. Once we find the active
323 // rectangle we clear this flag.
324 bool m_locatingActiveRect;
325
326 // The scoping effort can time out and we need to keep track of where we
327 // ended our last search so we can continue from where we left of.
328 RefPtr<WebCore::Range> m_resumeScopingFromRange;
329
330 // Keeps track of the last string this frame searched for. This is used for
331 // short-circuiting searches in the following scenarios: When a frame has
332 // been searched and returned 0 results, we don't need to search that frame
333 // again if the user is just adding to the search (making it more specific).
334 WebCore::String m_lastSearchString;
335
336 // Keeps track of how many matches this frame has found so far, so that we
337 // don't loose count between scoping efforts, and is also used (in conjunction
338 // with m_lastSearchString and m_scopingComplete) to figure out if we need to
339 // search the frame again.
340 int m_lastMatchCount;
341
342 // This variable keeps a cumulative total of matches found so far for ALL the
343 // frames on the page, and is only incremented by calling IncreaseMatchCount
344 // (on the main frame only). It should be -1 for all other frames.
345 size_t m_totalMatchCount;
346
347 // This variable keeps a cumulative total of how many frames are currently
348 // scoping, and is incremented/decremented on the main frame only.
349 // It should be -1 for all other frames.
350 int m_framesScopingCount;
351
352 // Keeps track of whether the scoping effort was completed (the user may
353 // interrupt it before it completes by submitting a new search).
354 bool m_scopingComplete;
355
356 // Keeps track of when the scoping effort should next invalidate the scrollbar
357 // and the frame area.
358 int m_nextInvalidateAfter;
359
360 // A list of all of the pending calls to scopeStringMatches.
361 Vector<DeferredScopeStringMatches*> m_deferredScopingWork;
362
363 // Valid between calls to BeginPrint() and EndPrint(). Containts the print
364 // information. Is used by PrintPage().
365 OwnPtr<ChromePrintContext> m_printContext;
366
367 // The input fields that are interested in edit events and their associated
368 // listeners.
369 typedef HashMap<RefPtr<WebCore::HTMLInputElement>,
370 PasswordAutocompleteListener*> PasswordListenerMap;
371 PasswordListenerMap m_passwordListeners;
395 }; 372 };
396 373
397 #endif // WEBKIT_GLUE_WEBFRAME_IMPL_H_ 374 } // namespace WebKit
375
376 #endif
OLDNEW
« no previous file with comments | « webkit/api/src/InspectorClientImpl.cpp ('k') | webkit/api/src/WebFrameImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698