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.
19typedef void* HANDLE;
20
21class GURL;
22struct NPObject;
23
24namespace content {
25
26class WebPluginResourceClient;
27#if defined(OS_MACOSX)
28class 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.
33class 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