Home | History | Annotate | Download | only in npapi
      1 // Copyright (c) 2012 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_H_
      6 #define CONTENT_CHILD_NPAPI_WEBPLUGIN_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "ui/gfx/native_widget_types.h"
     13 #include "ui/gfx/rect.h"
     14 #include "ui/gl/gpu_preference.h"
     15 
     16 // TODO(port): this typedef is obviously incorrect on non-Windows
     17 // platforms, but now a lot of code now accidentally depends on them
     18 // existing.  #ifdef out these declarations and fix all the users.
     19 typedef void* HANDLE;
     20 
     21 class GURL;
     22 struct NPObject;
     23 
     24 namespace content {
     25 
     26 class WebPluginResourceClient;
     27 #if defined(OS_MACOSX)
     28 class WebPluginAcceleratedSurface;
     29 #endif
     30 
     31 // The WebKit side of a plugin implementation.  It provides wrappers around
     32 // operations that need to interact with the frame and other WebCore objects.
     33 class WebPlugin {
     34  public:
     35   virtual ~WebPlugin() {}
     36 
     37   // Called by the plugin delegate to let the WebPlugin know if the plugin is
     38   // windowed (i.e. handle is not NULL) or windowless (handle is NULL).  This
     39   // tells the WebPlugin to send mouse/keyboard events to the plugin delegate,
     40   // as well as the information about the HDC for paint operations.
     41   virtual void SetWindow(gfx::PluginWindowHandle window) = 0;
     42 
     43   // Whether input events should be sent to the delegate.
     44   virtual void SetAcceptsInputEvents(bool accepts) = 0;
     45 
     46   // Called by the plugin delegate to let it know that the window is being
     47   // destroyed.
     48   virtual void WillDestroyWindow(gfx::PluginWindowHandle window) = 0;
     49 
     50   // Cancels a pending request.
     51   virtual void CancelResource(unsigned long id) = 0;
     52   virtual void Invalidate() = 0;
     53   virtual void InvalidateRect(const gfx::Rect& rect) = 0;
     54 
     55   // Returns the NPObject for the browser's window object. Does not
     56   // take a reference.
     57   virtual NPObject* GetWindowScriptNPObject() = 0;
     58 
     59   // Returns the DOM element that loaded the plugin. Does not take a
     60   // reference.
     61   virtual NPObject* GetPluginElement() = 0;
     62 
     63   // Resolves the proxies for the url, returns true on success.
     64   virtual bool FindProxyForUrl(const GURL& url, std::string* proxy_list) = 0;
     65 
     66   // Cookies
     67   virtual void SetCookie(const GURL& url,
     68                          const GURL& first_party_for_cookies,
     69                          const std::string& cookie) = 0;
     70   virtual std::string GetCookies(const GURL& url,
     71                                  const GURL& first_party_for_cookies) = 0;
     72 
     73   // Handles GetURL/GetURLNotify/PostURL/PostURLNotify requests initiated
     74   // by plugins.  If the plugin wants notification of the result, notify_id will
     75   // be non-zero.
     76   virtual void HandleURLRequest(const char* url,
     77                                 const char* method,
     78                                 const char* target,
     79                                 const char* buf,
     80                                 unsigned int len,
     81                                 int notify_id,
     82                                 bool popups_allowed,
     83                                 bool notify_redirects) = 0;
     84 
     85   // Cancels document load.
     86   virtual void CancelDocumentLoad() = 0;
     87 
     88   // Initiates a HTTP range request for an existing stream.
     89   virtual void InitiateHTTPRangeRequest(const char* url,
     90                                         const char* range_info,
     91                                         int range_request_id) = 0;
     92 
     93   virtual void DidStartLoading() = 0;
     94   virtual void DidStopLoading() = 0;
     95 
     96   // Returns true iff in incognito mode.
     97   virtual bool IsOffTheRecord() = 0;
     98 
     99   // Called when the WebPluginResourceClient instance is deleted.
    100   virtual void ResourceClientDeleted(
    101       WebPluginResourceClient* resource_client) {}
    102 
    103   // Defers the loading of the resource identified by resource_id. This is
    104   // controlled by the defer parameter.
    105   virtual void SetDeferResourceLoading(unsigned long resource_id,
    106                                        bool defer) = 0;
    107 
    108   // Handles NPN_URLRedirectResponse calls issued by plugins in response to
    109   // HTTP URL redirect notifications.
    110   virtual void URLRedirectResponse(bool allow, int resource_id) = 0;
    111 
    112   // Returns true if the new url is a secure transition. This is to catch a
    113   // plugin src url transitioning from https to http.
    114   virtual bool CheckIfRunInsecureContent(const GURL& url) = 0;
    115 
    116 #if defined(OS_WIN)
    117   // |pump_messages_event| is a event handle which is used in NPP_HandleEvent
    118   // calls to pump messages if the plugin enters a modal loop.
    119   // |dummy_activation_window} is used to ensure correct keyboard activation.
    120   // It needs to be a child of the parent window.
    121   virtual void SetWindowlessData(HANDLE pump_messages_event,
    122                                  gfx::NativeViewId dummy_activation_window) = 0;
    123 #endif
    124 
    125 #if defined(OS_MACOSX)
    126   // Called to inform the WebPlugin that the plugin has gained or lost focus.
    127   virtual void FocusChanged(bool focused) {}
    128 
    129   // Starts plugin IME.
    130   virtual void StartIme() {}
    131 
    132   // Returns the accelerated surface abstraction for accelerated plugins.
    133   virtual WebPluginAcceleratedSurface* GetAcceleratedSurface(
    134       gfx::GpuPreference gpu_preference) = 0;
    135 
    136   // Core Animation plugin support. CA plugins always render through
    137   // the compositor.
    138   virtual void AcceleratedPluginEnabledRendering() = 0;
    139   virtual void AcceleratedPluginAllocatedIOSurface(int32 width,
    140                                                    int32 height,
    141                                                    uint32 surface_id) = 0;
    142   virtual void AcceleratedPluginSwappedIOSurface() = 0;
    143 #endif
    144 };
    145 
    146 }  // namespace content
    147 
    148 #endif  // CONTENT_CHILD_NPAPI_WEBPLUGIN_H_
    149