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

Side by Side Diff: webkit/glue/plugins/webplugin_impl.h

Issue 6012002: Move the NPAPI files from webkit/glue/plugins to webkit/plugins/npapi and put... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years 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/glue/plugins/webplugin_file_delegate.h ('k') | webkit/glue/plugins/webplugin_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef WEBKIT_GLUE_WEBPLUGIN_IMPL_H_
6 #define WEBKIT_GLUE_WEBPLUGIN_IMPL_H_
7
8 #include <string>
9 #include <map>
10 #include <vector>
11
12 #include "base/basictypes.h"
13 #include "base/file_path.h"
14 #include "base/task.h"
15 #include "base/weak_ptr.h"
16 #include "gfx/native_widget_types.h"
17 #include "googleurl/src/gurl.h"
18 #include "third_party/WebKit/WebKit/chromium/public/WebPlugin.h"
19 #include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
20 #include "third_party/WebKit/WebKit/chromium/public/WebString.h"
21 #include "third_party/WebKit/WebKit/chromium/public/WebURLLoaderClient.h"
22 #include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h"
23 #include "third_party/WebKit/WebKit/chromium/public/WebVector.h"
24 #include "webkit/glue/plugins/webplugin.h"
25
26 class WebViewDelegate;
27
28 namespace WebKit {
29 class WebDevToolsAgent;
30 class WebFrame;
31 class WebPluginContainer;
32 class WebURLResponse;
33 class WebURLLoader;
34 class WebURLRequest;
35 }
36
37 namespace webkit_glue {
38
39 class MultipartResponseDelegate;
40 class WebPluginDelegate;
41 class WebPluginPageDelegate;
42
43 // This is the WebKit side of the plugin implementation that forwards calls,
44 // after changing out of WebCore types, to a delegate. The delegate may
45 // be in a different process.
46 class WebPluginImpl : public WebPlugin,
47 public WebKit::WebPlugin,
48 public WebKit::WebURLLoaderClient {
49 public:
50 WebPluginImpl(
51 WebKit::WebFrame* frame,
52 const WebKit::WebPluginParams& params,
53 const FilePath& file_path,
54 const std::string& mime_type,
55 const base::WeakPtr<WebPluginPageDelegate>& page_delegate);
56 virtual ~WebPluginImpl();
57
58 // Helper function for sorting post data.
59 static bool SetPostData(WebKit::WebURLRequest* request,
60 const char* buf,
61 uint32 length);
62
63 virtual WebPluginDelegate* delegate();
64
65 private:
66 // WebKit::WebPlugin methods:
67 virtual bool initialize(
68 WebKit::WebPluginContainer* container);
69 virtual void destroy();
70 virtual NPObject* scriptableObject();
71 virtual void paint(
72 WebKit::WebCanvas* canvas, const WebKit::WebRect& paint_rect);
73 virtual void updateGeometry(
74 const WebKit::WebRect& frame_rect, const WebKit::WebRect& clip_rect,
75 const WebKit::WebVector<WebKit::WebRect>& cut_outs, bool is_visible);
76 virtual unsigned getBackingTextureId();
77 virtual void updateFocus(bool focused);
78 virtual void updateVisibility(bool visible);
79 virtual bool acceptsInputEvents();
80 virtual bool handleInputEvent(
81 const WebKit::WebInputEvent& event, WebKit::WebCursorInfo& cursor_info);
82 virtual void didReceiveResponse(const WebKit::WebURLResponse& response);
83 virtual void didReceiveData(const char* data, int data_length);
84 virtual void didFinishLoading();
85 virtual void didFailLoading(const WebKit::WebURLError& error);
86 virtual void didFinishLoadingFrameRequest(
87 const WebKit::WebURL& url, void* notify_data);
88 virtual void didFailLoadingFrameRequest(
89 const WebKit::WebURL& url, void* notify_data,
90 const WebKit::WebURLError& error);
91 virtual bool supportsPaginatedPrint();
92 virtual int printBegin(const WebKit::WebRect& printable_area,
93 int printer_dpi);
94 virtual bool printPage(int page_number, WebKit::WebCanvas* canvas);
95 virtual void printEnd();
96 virtual bool hasSelection() const;
97 virtual WebKit::WebString selectionAsText() const;
98 virtual WebKit::WebString selectionAsMarkup() const;
99 virtual void setZoomFactor(float scale, bool text_only);
100 virtual bool startFind(const WebKit::WebString& search_text,
101 bool case_sensitive,
102 int identifier);
103 virtual void selectFindResult(bool forward);
104 virtual void stopFind();
105
106 // WebPlugin implementation:
107 virtual void SetWindow(gfx::PluginWindowHandle window);
108 virtual void SetAcceptsInputEvents(bool accepts);
109 virtual void WillDestroyWindow(gfx::PluginWindowHandle window);
110 #if defined(OS_WIN)
111 void SetWindowlessPumpEvent(HANDLE pump_messages_event) { }
112 #endif
113 virtual void CancelResource(unsigned long id);
114 virtual void Invalidate();
115 virtual void InvalidateRect(const gfx::Rect& rect);
116 virtual NPObject* GetWindowScriptNPObject();
117 virtual NPObject* GetPluginElement();
118 virtual void SetCookie(const GURL& url,
119 const GURL& first_party_for_cookies,
120 const std::string& cookie);
121 virtual std::string GetCookies(const GURL& url,
122 const GURL& first_party_for_cookies);
123 virtual void ShowModalHTMLDialog(const GURL& url, int width, int height,
124 const std::string& json_arguments,
125 std::string* json_retval);
126 virtual void OnMissingPluginStatus(int status);
127
128 virtual void URLRedirectResponse(bool allow, int resource_id);
129
130 // Given a (maybe partial) url, completes using the base url.
131 GURL CompleteURL(const char* url);
132
133 // Executes the script passed in. The notify_needed and notify_data arguments
134 // are passed in by the plugin process. These indicate whether the plugin
135 // expects a notification on script execution. We pass them back to the
136 // plugin as is. This avoids having to track the notification arguments in
137 // the plugin process.
138 bool ExecuteScript(const std::string& url, const std::wstring& script,
139 bool notify_needed, intptr_t notify_data,
140 bool popups_allowed);
141
142 enum RoutingStatus {
143 ROUTED,
144 NOT_ROUTED,
145 INVALID_URL,
146 GENERAL_FAILURE
147 };
148
149 // Determines the referrer value sent along with outgoing HTTP requests
150 // issued by plugins.
151 enum Referrer {
152 PLUGIN_SRC,
153 DOCUMENT_URL,
154 NO_REFERRER
155 };
156
157 // Given a download request, check if we need to route the output to a frame.
158 // Returns ROUTED if the load is done and routed to a frame, NOT_ROUTED or
159 // corresponding error codes otherwise.
160 RoutingStatus RouteToFrame(const char* url,
161 bool is_javascript_url,
162 const char* method,
163 const char* target,
164 const char* buf,
165 unsigned int len,
166 int notify_id,
167 Referrer referrer_flag);
168
169 // Returns the next avaiable resource id. Returns 0 if the operation fails.
170 // It may fail if the page has already been closed.
171 unsigned long GetNextResourceId();
172
173 // Initiates HTTP GET/POST requests.
174 // Returns true on success.
175 bool InitiateHTTPRequest(unsigned long resource_id,
176 WebPluginResourceClient* client,
177 const GURL& url,
178 const char* method,
179 const char* buf,
180 int len,
181 const char* range_info,
182 Referrer referrer_flag,
183 bool notify_redirects);
184
185 gfx::Rect GetWindowClipRect(const gfx::Rect& rect);
186
187 // Sets the actual Widget for the plugin.
188 void SetContainer(WebKit::WebPluginContainer* container);
189
190 // Destroys the plugin instance.
191 // The response_handle_to_ignore parameter if not NULL indicates the
192 // resource handle to be left valid during plugin shutdown.
193 void TearDownPluginInstance(WebKit::WebURLLoader* loader_to_ignore);
194
195 // WebURLLoaderClient implementation. We implement this interface in the
196 // renderer process, and then use the simple WebPluginResourceClient interface
197 // to relay the callbacks to the plugin.
198 virtual void willSendRequest(WebKit::WebURLLoader* loader,
199 WebKit::WebURLRequest& request,
200 const WebKit::WebURLResponse& response);
201 virtual void didSendData(WebKit::WebURLLoader* loader,
202 unsigned long long bytes_sent,
203 unsigned long long total_bytes_to_be_sent);
204 virtual void didReceiveResponse(WebKit::WebURLLoader* loader,
205 const WebKit::WebURLResponse& response);
206 virtual void didReceiveData(WebKit::WebURLLoader* loader, const char *buffer,
207 int length);
208 virtual void didFinishLoading(WebKit::WebURLLoader* loader,
209 double finishTime);
210 virtual void didFail(WebKit::WebURLLoader* loader,
211 const WebKit::WebURLError& error);
212
213 // Helper function to remove the stored information about a resource
214 // request given its index in m_clients.
215 void RemoveClient(size_t i);
216
217 // Helper function to remove the stored information about a resource
218 // request given a handle.
219 void RemoveClient(WebKit::WebURLLoader* loader);
220
221 virtual void HandleURLRequest(const char* url,
222 const char *method,
223 const char* target,
224 const char* buf,
225 unsigned int len,
226 int notify_id,
227 bool popups_allowed,
228 bool notify_redirects);
229
230 virtual void CancelDocumentLoad();
231
232 virtual void InitiateHTTPRangeRequest(
233 const char* url, const char* range_info, int pending_request_id);
234
235 virtual void SetDeferResourceLoading(unsigned long resource_id, bool defer);
236
237 // Ignore in-process plugins mode for this flag.
238 virtual bool IsOffTheRecord();
239
240 // Handles HTTP multipart responses, i.e. responses received with a HTTP
241 // status code of 206.
242 void HandleHttpMultipartResponse(const WebKit::WebURLResponse& response,
243 WebPluginResourceClient* client);
244
245 void HandleURLRequestInternal(const char* url,
246 const char* method,
247 const char* target,
248 const char* buf,
249 unsigned int len,
250 int notify_id,
251 bool popups_allowed,
252 Referrer referrer_flag,
253 bool notify_redirects);
254
255 // Tears down the existing plugin instance and creates a new plugin instance
256 // to handle the response identified by the loader parameter.
257 bool ReinitializePluginForResponse(WebKit::WebURLLoader* loader);
258
259 // Delayed task for downloading the plugin source URL.
260 void OnDownloadPluginSrcUrl();
261
262 struct ClientInfo;
263
264 // Helper functions
265 WebPluginResourceClient* GetClientFromLoader(WebKit::WebURLLoader* loader);
266 ClientInfo* GetClientInfoFromLoader(WebKit::WebURLLoader* loader);
267
268 // Helper function to set the referrer on the request passed in.
269 void SetReferrer(WebKit::WebURLRequest* request, Referrer referrer_flag);
270
271 // Returns DevToolsAgent for the frame or 0.
272 WebKit::WebDevToolsAgent* GetDevToolsAgent();
273
274 // Check for invalid chars like @, ;, \ before the first / (in path).
275 bool IsValidUrl(const GURL& url, Referrer referrer_flag);
276
277 std::vector<ClientInfo> clients_;
278
279 bool windowless_;
280 gfx::PluginWindowHandle window_;
281 bool accepts_input_events_;
282 base::WeakPtr<WebPluginPageDelegate> page_delegate_;
283 WebKit::WebFrame* webframe_;
284
285 WebPluginDelegate* delegate_;
286
287 // This is just a weak reference.
288 WebKit::WebPluginContainer* container_;
289
290 typedef std::map<WebPluginResourceClient*,
291 webkit_glue::MultipartResponseDelegate*>
292 MultiPartResponseHandlerMap;
293 // Tracks HTTP multipart response handlers instantiated for
294 // a WebPluginResourceClient instance.
295 MultiPartResponseHandlerMap multi_part_response_map_;
296
297 // The plugin source URL.
298 GURL plugin_url_;
299
300 // Indicates if the download would be initiated by the plugin or us.
301 bool load_manually_;
302
303 // Indicates if this is the first geometry update received by the plugin.
304 bool first_geometry_update_;
305
306 // Set to true if the next response error should be ignored.
307 bool ignore_response_error_;
308
309 // The current plugin geometry and clip rectangle.
310 WebPluginGeometry geometry_;
311
312 // The location of the plugin on disk.
313 FilePath file_path_;
314
315 // The mime type of the plugin.
316 std::string mime_type_;
317
318 // Holds the list of argument names and values passed to the plugin. We keep
319 // these so that we can re-initialize the plugin if we need to.
320 std::vector<std::string> arg_names_;
321 std::vector<std::string> arg_values_;
322
323 ScopedRunnableMethodFactory<WebPluginImpl> method_factory_;
324
325 DISALLOW_COPY_AND_ASSIGN(WebPluginImpl);
326 };
327
328 } // namespace webkit_glue
329
330 #endif // #ifndef WEBKIT_GLUE_WEBPLUGIN_IMPL_H_
OLDNEW
« no previous file with comments | « webkit/glue/plugins/webplugin_file_delegate.h ('k') | webkit/glue/plugins/webplugin_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698