Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / content / child / npapi / webplugin_delegate.h
blobeaef885a38cd2824743795a384dd12ec9b399215
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.
5 #ifndef CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_
6 #define CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_
8 #include <string>
9 #include <vector>
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"
17 class GURL;
18 class SkCanvas;
19 struct NPObject;
21 namespace blink {
22 class WebInputEvent;
25 namespace gfx {
26 class Rect;
29 namespace content {
31 class WebPluginResourceClient;
33 // This is the interface that a plugin implementation needs to provide.
34 class WebPluginDelegate {
35 public:
36 virtual ~WebPluginDelegate() {}
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;
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;
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;
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;
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;
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;
79 // Gets the NPObject associated with the plugin for scripting.
80 virtual NPObject* GetPluginScriptableObject() = 0;
82 // Gets the NPP instance uniquely identifying the plugin for its lifetime.
83 virtual struct _NPP* GetPluginNPP() = 0;
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;
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;
94 // Returns the process id of the process that is running the plugin.
95 virtual int GetProcessId() = 0;
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;
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;
111 // Receives the data.
112 virtual void DidReceiveManualData(const char* buffer, int length) = 0;
114 // Indicates end of data load.
115 virtual void DidFinishManualLoading() = 0;
117 // Indicates a failure in data receipt.
118 virtual void DidManualLoadFail() = 0;
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;
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;
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;
150 } // namespace content
152 #endif // CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_