1// Copyright (c) 2011 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 CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_
6#define CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_
7
8#include <string>
9#include <vector>
10
11#include "base/strings/string16.h"
12#include "build/build_config.h"
13#include "content/common/cursors/webcursor.h"
14#include "third_party/npapi/bindings/npapi.h"
15#include "ui/gfx/native_widget_types.h"
16
17class GURL;
18class SkCanvas;
19struct NPObject;
20
21namespace blink {
22class WebInputEvent;
23}
24
25namespace gfx {
26class Rect;
27}
28
29namespace content {
30
31class WebPluginResourceClient;
32
33// This is the interface that a plugin implementation needs to provide.
34class WebPluginDelegate {
35 public:
36  virtual ~WebPluginDelegate() {}
37
38  // Initializes the plugin implementation with the given (UTF8) arguments.
39  // Note that the lifetime of WebPlugin must be longer than this delegate.
40  // If this function returns false the plugin isn't started and shouldn't be
41  // called again.  If this method succeeds, then the WebPlugin is valid until
42  // PluginDestroyed is called.
43  // The load_manually parameter if true indicates that the plugin data would
44  // be passed from webkit. if false indicates that the plugin should download
45  // the data. This also controls whether the plugin is instantiated as a full
46  // page plugin (NP_FULL) or embedded (NP_EMBED).
47  virtual bool Initialize(const GURL& url,
48                          const std::vector<std::string>& arg_names,
49                          const std::vector<std::string>& arg_values,
50                          bool load_manually) = 0;
51
52  // Called when the WebPlugin is being destroyed.  This is a signal to the
53  // delegate that it should tear-down the plugin implementation and not call
54  // methods on the WebPlugin again.
55  virtual void PluginDestroyed() = 0;
56
57  // Update the geometry of the plugin.  This is a request to move the
58  // plugin, relative to its containing window, to the coords given by
59  // window_rect.  Its contents should be clipped to the coords given
60  // by clip_rect, which are relative to the origin of the plugin
61  // window.  The clip_rect is in plugin-relative coordinates.
62  virtual void UpdateGeometry(const gfx::Rect& window_rect,
63                              const gfx::Rect& clip_rect) = 0;
64
65  // Tells the plugin to paint the damaged rect.  |canvas| is only used for
66  // windowless plugins.
67  virtual void Paint(SkCanvas* canvas, const gfx::Rect& rect) = 0;
68
69  // Informs the plugin that it has gained or lost focus. This is only called in
70  // windowless mode.
71  virtual void SetFocus(bool focused) = 0;
72
73  // For windowless plugins, gives them a user event like mouse/keyboard.
74  // Returns whether the event was handled. This is only called in windowsless
75  // mode. See NPAPI NPP_HandleEvent for more information.
76  virtual bool HandleInputEvent(const blink::WebInputEvent& event,
77                                WebCursor::CursorInfo* cursor) = 0;
78
79  // Gets the NPObject associated with the plugin for scripting.
80  virtual NPObject* GetPluginScriptableObject() = 0;
81
82  // Gets the NPP instance uniquely identifying the plugin for its lifetime.
83  virtual struct _NPP* GetPluginNPP() = 0;
84
85  // Gets the form value associated with the plugin instance.
86  // Returns false if the value is not available.
87  virtual bool GetFormValue(base::string16* value) = 0;
88
89  // Receives notification about a resource load that the plugin initiated
90  // for a frame.
91  virtual void DidFinishLoadWithReason(const GURL& url, NPReason reason,
92                                       int notify_id) = 0;
93
94  // Returns the process id of the process that is running the plugin.
95  virtual int GetProcessId() = 0;
96
97  // The result, UTF-8 encoded, of the script execution is returned via this
98  // function.
99  virtual void SendJavaScriptStream(const GURL& url,
100                                    const std::string& result,
101                                    bool success,
102                                    int notify_id) = 0;
103
104  // Receives notification about data being available.
105  virtual void DidReceiveManualResponse(const GURL& url,
106                                        const std::string& mime_type,
107                                        const std::string& headers,
108                                        uint32 expected_length,
109                                        uint32 last_modified) = 0;
110
111  // Receives the data.
112  virtual void DidReceiveManualData(const char* buffer, int length) = 0;
113
114  // Indicates end of data load.
115  virtual void DidFinishManualLoading() = 0;
116
117  // Indicates a failure in data receipt.
118  virtual void DidManualLoadFail() = 0;
119
120  // Creates a WebPluginResourceClient instance and returns the same.
121  virtual WebPluginResourceClient* CreateResourceClient(
122      unsigned long resource_id,
123      const GURL& url,
124      int notify_id) = 0;
125
126  // Creates a WebPluginResourceClient instance for an existing stream that is
127  // has become seekable.
128  virtual WebPluginResourceClient* CreateSeekableResourceClient(
129      unsigned long resource_id, int range_request_id) = 0;
130
131  // Tell the plugin that the given URL should be fetched. This is a result of
132  // loading the plugin data or the plugin calling HandleURLRequest which didn't
133  // end up being routed to another frame or being a javscript:// URL.
134  virtual void FetchURL(unsigned long resource_id,
135                        int notify_id,
136                        const GURL& url,
137                        const GURL& first_party_for_cookies,
138                        const std::string& method,
139                        const char* buf,
140                        unsigned int len,
141                        const GURL& referrer,
142                        bool notify_redirects,
143                        bool is_plugin_src_load,
144                        int origin_pid,
145                        int render_frame_id,
146                        int render_view_id) = 0;
147
148};
149
150}  // namespace content
151
152#endif  // CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_
153