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_
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"
31 class WebPluginResourceClient
;
33 // This is the interface that a plugin implementation needs to provide.
34 class WebPluginDelegate
{
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
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
91 virtual void DidFinishLoadWithReason(const GURL
& url
, NPReason reason
,
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
99 virtual void SendJavaScriptStream(const GURL
& url
,
100 const std::string
& result
,
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
,
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
,
137 const GURL
& first_party_for_cookies
,
138 const std::string
& method
,
141 const GURL
& referrer
,
142 bool notify_redirects
,
143 bool is_plugin_src_load
,
146 int render_view_id
) = 0;
150 } // namespace content
152 #endif // CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_