• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
~WebPlugin()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.
ResourceClientDeleted(WebPluginResourceClient * resource_client)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.
FocusChanged(bool focused)127   virtual void FocusChanged(bool focused) {}
128 
129   // Starts plugin IME.
StartIme()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