15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_
6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/common/cursors/webcursor.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/npapi/bindings/npapi.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class SkCanvas;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NPObject;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebInputEvent;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace content {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebPluginResourceClient;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is the interface that a plugin implementation needs to provide.
34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass WebPluginDelegate {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebPluginDelegate() {}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes the plugin implementation with the given (UTF8) arguments.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note that the lifetime of WebPlugin must be longer than this delegate.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If this function returns false the plugin isn't started and shouldn't be
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // called again.  If this method succeeds, then the WebPlugin is valid until
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginDestroyed is called.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The load_manually parameter if true indicates that the plugin data would
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be passed from webkit. if false indicates that the plugin should download
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the data. This also controls whether the plugin is instantiated as a full
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // page plugin (NP_FULL) or embedded (NP_EMBED).
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Initialize(const GURL& url,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const std::vector<std::string>& arg_names,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const std::vector<std::string>& arg_values,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          bool load_manually) = 0;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the WebPlugin is being destroyed.  This is a signal to the
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // delegate that it should tear-down the plugin implementation and not call
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // methods on the WebPlugin again.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void PluginDestroyed() = 0;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update the geometry of the plugin.  This is a request to move the
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // plugin, relative to its containing window, to the coords given by
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window_rect.  Its contents should be clipped to the coords given
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // by clip_rect, which are relative to the origin of the plugin
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window.  The clip_rect is in plugin-relative coordinates.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateGeometry(const gfx::Rect& window_rect,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const gfx::Rect& clip_rect) = 0;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tells the plugin to paint the damaged rect.  |canvas| is only used for
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // windowless plugins.
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void Paint(SkCanvas* canvas, const gfx::Rect& rect) = 0;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Informs the plugin that it has gained or lost focus. This is only called in
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // windowless mode.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetFocus(bool focused) = 0;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // For windowless plugins, gives them a user event like mouse/keyboard.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the event was handled. This is only called in windowsless
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // mode. See NPAPI NPP_HandleEvent for more information.
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool HandleInputEvent(const blink::WebInputEvent& event,
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                WebCursor::CursorInfo* cursor) = 0;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the NPObject associated with the plugin for scripting.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NPObject* GetPluginScriptableObject() = 0;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Gets the NPP instance uniquely identifying the plugin for its lifetime.
8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual struct _NPP* GetPluginNPP() = 0;
8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Gets the form value associated with the plugin instance.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns false if the value is not available.
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool GetFormValue(base::string16* value) = 0;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Receives notification about a resource load that the plugin initiated
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for a frame.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidFinishLoadWithReason(const GURL& url, NPReason reason,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       int notify_id) = 0;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the process id of the process that is running the plugin.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetProcessId() = 0;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The result, UTF-8 encoded, of the script execution is returned via this
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // function.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SendJavaScriptStream(const GURL& url,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const std::string& result,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    bool success,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    int notify_id) = 0;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Receives notification about data being available.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidReceiveManualResponse(const GURL& url,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& mime_type,
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& headers,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        uint32 expected_length,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        uint32 last_modified) = 0;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Receives the data.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidReceiveManualData(const char* buffer, int length) = 0;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates end of data load.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidFinishManualLoading() = 0;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates a failure in data receipt.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidManualLoadFail() = 0;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a WebPluginResourceClient instance and returns the same.
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebPluginResourceClient* CreateResourceClient(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      unsigned long resource_id,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& url,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int notify_id) = 0;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a WebPluginResourceClient instance for an existing stream that is
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // has become seekable.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebPluginResourceClient* CreateSeekableResourceClient(
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      unsigned long resource_id, int range_request_id) = 0;
13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Tell the plugin that the given URL should be fetched. This is a result of
13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // loading the plugin data or the plugin calling HandleURLRequest which didn't
13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // end up being routed to another frame or being a javscript:// URL.
13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void FetchURL(unsigned long resource_id,
13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        int notify_id,
13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        const GURL& url,
13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        const GURL& first_party_for_cookies,
13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        const std::string& method,
139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                        const char* buf,
140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                        unsigned int len,
14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        const GURL& referrer,
14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        bool notify_redirects,
14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        bool is_plugin_src_load,
14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        int origin_pid,
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        int render_frame_id,
14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                        int render_view_id) = 0;
14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}  // namespace content
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif  // CONTENT_CHILD_NPAPI_WEBPLUGIN_DELEGATE_H_
153