1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*
22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved.
3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without
5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are
6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met:
7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions of source code must retain the above copyright
9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer.
10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Redistributions in binary form must reproduce the above
11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer
12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the
13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution.
14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *     * Neither the name of Google Inc. nor the names of its
15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from
16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission.
17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block *
18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */
30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebFrameClient_h
32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebFrameClient_h
33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebCommon.h"
35e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebFileSystem.h"
36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebNavigationPolicy.h"
37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebNavigationType.h"
382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebStorageQuotaType.h"
392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebTextDirection.h"
40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebURLError.h"
41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
42643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit {
43643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebApplicationCacheHost;
45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebApplicationCacheHostClient;
46692e5dbf12901edacf14812a6fae25462920af42Steve Blockclass WebCookieJar;
47643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebDataSource;
48643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebFormElement;
49643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebFrame;
50643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMediaPlayer;
51643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMediaPlayerClient;
52643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebNode;
53643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebPlugin;
54643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebSecurityOrigin;
55643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebSharedWorker;
562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass WebStorageQuotaCallbacks;
57643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebString;
58643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebURL;
59643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebURLRequest;
60643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebURLResponse;
61643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebWorker;
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebWorkerClient;
63643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebPluginParams;
64643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebRect;
65643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebSize;
66643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebURLError;
67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
68643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebFrameClient {
69643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic:
70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Factory methods -----------------------------------------------------
71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // May return null.
73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebPlugin* createPlugin(WebFrame*, const WebPluginParams&) { return 0; }
74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // May return null.
76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // May return null.
79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebSharedWorker* createSharedWorker(WebFrame*, const WebURL&, const WebString&, unsigned long long) { return 0; }
80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // May return null.
82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebMediaPlayer* createMediaPlayer(WebFrame*, WebMediaPlayerClient*) { return 0; }
83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // May return null.
85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual WebApplicationCacheHost* createApplicationCacheHost(WebFrame*, WebApplicationCacheHostClient*) { return 0; }
86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
87692e5dbf12901edacf14812a6fae25462920af42Steve Block
88692e5dbf12901edacf14812a6fae25462920af42Steve Block    // Services ------------------------------------------------------------
89692e5dbf12901edacf14812a6fae25462920af42Steve Block
90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // A frame specific cookie jar.  May return null, in which case
91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // WebKitClient::cookieJar() will be called to access cookies.
92f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual WebCookieJar* cookieJar(WebFrame*) { return 0; }
93692e5dbf12901edacf14812a6fae25462920af42Steve Block
94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // General notifications -----------------------------------------------
96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
97f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    // This frame has been detached from the view.
98f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    //
99f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    // FIXME: Do not use this in new code. Currently this is used by code in
100f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    // Chromium that errantly caches WebKit objects.
101f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void frameDetached(WebFrame*) { }
102f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // This frame is about to be closed.
104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void willClose(WebFrame*) { }
105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
106d0825bca7fe65beaee391d30da42e937db621564Steve Block    // Controls whether plugins are allowed for this frame.
107d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual bool allowPlugins(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
108d0825bca7fe65beaee391d30da42e937db621564Steve Block
109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Notifies the client that the frame would have instantiated a plug-in if plug-ins were enabled.
110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual void didNotAllowPlugins(WebFrame*) { }
111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
112d0825bca7fe65beaee391d30da42e937db621564Steve Block    // Controls whether images are allowed for this frame.
113d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual bool allowImages(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
114d0825bca7fe65beaee391d30da42e937db621564Steve Block
115ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    // Notifies the client that continuous spell checking has been enabled or
116ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    // disabled.
117ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    virtual void didToggleContinuousSpellChecking(WebFrame*) { }
118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Load commands -------------------------------------------------------
120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The client should handle the navigation externally.
122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void loadURLExternally(
123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const WebURLRequest&, WebNavigationPolicy) { }
124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Navigational queries ------------------------------------------------
127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The client may choose to alter the navigation policy.  Otherwise,
129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // defaultPolicy should just be returned.
130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebNavigationPolicy decidePolicyForNavigation(
131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const WebURLRequest&, WebNavigationType,
132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebNode& originatingNode,
133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebNavigationPolicy defaultPolicy, bool isRedirect) { return defaultPolicy; }
134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Query if the specified request can be handled.
136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool canHandleRequest(
137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const WebURLRequest& request) { return true; }
138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns an error corresponding to canHandledRequest() returning false.
140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebURLError cannotHandleRequestError(
141643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const WebURLRequest& request) { return WebURLError(); }
142643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
143643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Returns an error corresponding to a user cancellation event.
144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual WebURLError cancelledError(
145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const WebURLRequest& request) { return WebURLError(); }
146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Notify that a URL cannot be handled.
148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void unableToImplementPolicyWithError(
149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const WebURLError&) { }
150643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Navigational notifications ------------------------------------------
153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
15421939df44de1705786c545cd1bf519d47250322dBen Murdoch    // A form submission has been requested, but the page's submit event handler
15521939df44de1705786c545cd1bf519d47250322dBen Murdoch    // hasn't yet had a chance to run (and possibly alter/interrupt the submit.)
15621939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual void willSendSubmitEvent(WebFrame*, const WebFormElement&) { }
15721939df44de1705786c545cd1bf519d47250322dBen Murdoch
158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // A form submission is about to occur.
159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void willSubmitForm(WebFrame*, const WebFormElement&) { }
160643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // A client-side redirect will occur.  This may correspond to a <META
162643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // refresh> or some script activity.
163643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void willPerformClientRedirect(
164643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const WebURL& from, const WebURL& to,
165643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        double interval, double fireTime) { }
166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
167643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // A client-side redirect was cancelled.
168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didCancelClientRedirect(WebFrame*) { }
169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // A client-side redirect completed.
171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didCompleteClientRedirect(WebFrame*, const WebURL& fromURL) { }
172643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
173643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // A datasource has been created for a new navigation.  The given
174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // datasource will become the provisional datasource for the frame.
175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didCreateDataSource(WebFrame*, WebDataSource*) { }
176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // A new provisional load has been started.
178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didStartProvisionalLoad(WebFrame*) { }
179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The provisional load was redirected via a HTTP 3xx response.
181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didReceiveServerRedirectForProvisionalLoad(WebFrame*) { }
182643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The provisional load failed.
184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didFailProvisionalLoad(WebFrame*, const WebURLError&) { }
185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Notifies the client to commit data for the given frame.  The client
187643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // may optionally prevent default processing by setting preventDefault
188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // to true before returning.  If default processing is prevented, then
189643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // it is up to the client to manually call commitDocumentData on the
190643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // WebFrame.  It is only valid to call commitDocumentData within a call
191643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // to didReceiveDocumentData.  If commitDocumentData is not called,
192643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // then an empty document will be loaded.
193643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didReceiveDocumentData(
194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const char* data, size_t length, bool& preventDefault) { }
195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The provisional datasource is now committed.  The first part of the
197643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // response body has been received, and the encoding of the response
198643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // body is known.
199643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didCommitProvisionalLoad(WebFrame*, bool isNewNavigation) { }
200643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
201643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The window object for the frame has been cleared of any extra
202643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // properties that may have been set by script from the previously
203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // loaded document.
204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didClearWindowObject(WebFrame*) { }
205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
206643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The document element has been created.
207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didCreateDocumentElement(WebFrame*) { }
208643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
209643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The page title is available.
2102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: remove override once Chrome is updated to new API.
211643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didReceiveTitle(WebFrame*, const WebString& title) { }
2122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void didReceiveTitle(WebFrame* frame, const WebString& title, WebTextDirection direction)
2132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    {
2142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        didReceiveTitle(frame, title);
2152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
216643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
21721939df44de1705786c545cd1bf519d47250322dBen Murdoch    // The icons for the page have changed.
21821939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual void didChangeIcons(WebFrame*) { }
21921939df44de1705786c545cd1bf519d47250322dBen Murdoch
220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The frame's document finished loading.
221643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didFinishDocumentLoad(WebFrame*) { }
222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The 'load' event was dispatched.
224643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didHandleOnloadEvents(WebFrame*) { }
225643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The frame's document or one of its subresources failed to load.
227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didFailLoad(WebFrame*, const WebURLError&) { }
228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The frame's document and all of its subresources succeeded to load.
230643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didFinishLoad(WebFrame*) { }
231643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // The navigation resulted in no change to the documents within the page.
233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // For example, the navigation may have just resulted in scrolling to a
234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // named anchor or a PopState event may have been dispatched.
235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual void didNavigateWithinPage(WebFrame*, bool isNewNavigation) { }
236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The navigation resulted in scrolling the page to a named anchor instead
238643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // of downloading a new document.
239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual void didChangeLocationWithinPage(WebFrame*) { }
240643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Called upon update to scroll position, document state, and other
242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // non-navigational events related to the data held by WebHistoryItem.
243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // WARNING: This method may be called very frequently.
244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didUpdateCurrentHistoryItem(WebFrame*) { }
245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Low-level resource notifications ------------------------------------
248643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
249643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // An identifier was assigned to the specified request.  The client
250643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // should remember this association if interested in subsequent events.
251643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void assignIdentifierToRequest(
252643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, unsigned identifier, const WebURLRequest&) { }
253643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
25428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu     // Remove the association between an identifier assigned to a request if
25528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu     // the client keeps such an association.
25628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu     virtual void removeIdentifierForRequest(unsigned identifier) { }
25728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
258643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // A request is about to be sent out, and the client may modify it.  Request
259643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // is writable, and changes to the URL, for example, will change the request
260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // made.  If this request is the result of a redirect, then redirectResponse
261643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // will be non-null and contain the response that triggered the redirect.
262643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void willSendRequest(
263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, unsigned identifier, WebURLRequest&,
264643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const WebURLResponse& redirectResponse) { }
265643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
266643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Response headers have been received for the resource request given
267643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // by identifier.
268643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didReceiveResponse(
269643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, unsigned identifier, const WebURLResponse&) { }
270643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
271643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The resource request given by identifier succeeded.
272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didFinishResourceLoad(
273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, unsigned identifier) { }
274643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
275643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The resource request given by identifier failed.
276643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didFailResourceLoad(
277643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, unsigned identifier, const WebURLError&) { }
278643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
279643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The specified request was satified from WebCore's memory cache.
280643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didLoadResourceFromMemoryCache(
281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        WebFrame*, const WebURLRequest&, const WebURLResponse&) { }
282643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
283643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // This frame has displayed inactive content (such as an image) from an
284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // insecure source.  Inactive content cannot spread to other frames.
285643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didDisplayInsecureContent(WebFrame*) { }
286643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
287643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The indicated security origin has run active content (such as a
288643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // script) from an insecure source.  Note that the insecure content can
289643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // spread to other frames in the same origin.
2902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void didRunInsecureContent(WebFrame*, const WebSecurityOrigin&, const WebURL& insecureURL) { }
291643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
292643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Script notifications ------------------------------------------------
294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
295643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Controls whether scripts are allowed to execute for this frame.
296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual bool allowScript(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Controls whether access to Web Databases is allowed for this frame.
299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual bool allowDatabase(WebFrame*, const WebString& name, const WebString& displayName, unsigned long estimatedSize) { return true; }
300dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Notifies the client that the frame would have executed script if script were enabled.
302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual void didNotAllowScript(WebFrame*) { }
303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
304643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Script in the page tried to allocate too much memory.
305643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didExhaustMemoryAvailableForScript(WebFrame*) { }
306643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
307643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Notifies that a new script context has been created for this frame.
308643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // This is similar to didClearWindowObject but only called once per
309643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // frame context.
310643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didCreateScriptContext(WebFrame*) { }
311643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
312643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Notifies that this frame's script context has been destroyed.
313643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didDestroyScriptContext(WebFrame*) { }
314643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
315643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Notifies that a garbage-collected context was created - content
316643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // scripts.
317643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didCreateIsolatedScriptContext(WebFrame*) { }
318643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
319bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // Controls whether the given script extension should run in a new script
320bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // context in this frame. If extensionGroup is 0, the script context is the
321bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // frame's main context. Otherwise, it is a context created by
322bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // WebFrame::executeScriptInIsolatedWorld with that same extensionGroup
323bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    // value.
324bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    virtual bool allowScriptExtension(WebFrame*, const WebString& extensionName, int extensionGroup) { return true; }
325bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
326643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
327643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Geometry notifications ----------------------------------------------
328643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
32921939df44de1705786c545cd1bf519d47250322dBen Murdoch    // The frame's document finished the initial layout of a page.
33021939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual void didFirstLayout(WebFrame*) { }
33121939df44de1705786c545cd1bf519d47250322dBen Murdoch
33221939df44de1705786c545cd1bf519d47250322dBen Murdoch    // The frame's document finished the initial non-empty layout of a page.
33321939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual void didFirstVisuallyNonEmptyLayout(WebFrame*) { }
33421939df44de1705786c545cd1bf519d47250322dBen Murdoch
335643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The size of the content area changed.
336643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didChangeContentsSize(WebFrame*, const WebSize&) { }
337643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
338643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // The main frame scrolled.
339643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void didChangeScrollOffset(WebFrame*) { }
340643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
341643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
342643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Find-in-page notifications ------------------------------------------
343643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
344643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Notifies how many matches have been found so far, for a given
345643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // identifier.  |finalUpdate| specifies whether this is the last update
346643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // (all frames have completed scoping).
347643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void reportFindInPageMatchCount(
348643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        int identifier, int count, bool finalUpdate) { }
349643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
350643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Notifies what tick-mark rect is currently selected.   The given
351643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // identifier lets the client know which request this message belongs
352643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // to, so that it can choose to ignore the message if it has moved on
353643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // to other things.  The selection rect is expected to have coordinates
354643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // relative to the top left corner of the web page area and represent
355643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // where on the screen the selection rect is currently located.
356643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void reportFindInPageSelection(
357643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        int identifier, int activeMatchOrdinal, const WebRect& selection) { }
358643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
359e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // FileSystem ----------------------------------------------------
360e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
361e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // Requests to open a FileSystem.
362e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // |size| indicates how much storage space (in bytes) the caller expects
363e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // to need.
364e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // WebFileSystemCallbacks::didOpenFileSystem() must be called with
365e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // a name and root path for the requested FileSystem when the operation
366e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // is completed successfully. WebFileSystemCallbacks::didFail() must be
367a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // called otherwise. The create bool is for indicating whether or not to
368a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // create root path for file systems if it do not exist.
369a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual void openFileSystem(
370a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        WebFrame*, WebFileSystem::Type, long long size,
371a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        bool create, WebFileSystemCallbacks*) { }
372a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
3732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Quota ---------------------------------------------------------
3742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Queries the origin's storage usage and quota information.
3762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // WebStorageQuotaCallbacks::didQueryStorageUsageAndQuota will be called
3772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // with the current usage and quota information for the origin. When
3782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // an error occurs WebStorageQuotaCallbacks::didFail is called with an
3792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // error code.
3802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // The callbacks object is deleted when the callback method is called
3812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // and does not need to be (and should not be) deleted manually.
3822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void queryStorageUsageAndQuota(
3832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        WebFrame*, WebStorageQuotaType, WebStorageQuotaCallbacks*) { }
3842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Requests a new quota size for the origin's storage.
3862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // |newQuotaInBytes| indicates how much storage space (in bytes) the
3872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // caller expects to need.
3882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // WebStorageQuotaCallbacks::didGrantStorageQuota will be called when
3892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // a new quota is granted. WebStorageQuotaCallbacks::didFail
3902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // is called with an error code otherwise.
3912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Note that the requesting quota size may not always be granted and
3922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // a smaller amount of quota than requested might be returned.
3932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // The callbacks object is deleted when the callback method is called
3942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // and does not need to be (and should not be) deleted manually.
3952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void requestStorageQuota(
3962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        WebFrame*, WebStorageQuotaType,
3972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        unsigned long long newQuotaInBytes,
3982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        WebStorageQuotaCallbacks*) { }
3992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
400643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprotected:
401643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ~WebFrameClient() { }
402643ca7872b450ea4efacab6188849e5aac2ba161Steve Block};
403643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
404643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit
405643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
406643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
407