Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: content/renderer/npapi/webplugin_delegate_proxy.h

Issue 1853793003: Remove content/renderer/npapi (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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_RENDERER_NPAPI_WEBPLUGIN_DELEGATE_PROXY_H_
6 #define CONTENT_RENDERER_NPAPI_WEBPLUGIN_DELEGATE_PROXY_H_
7
8 #include <stdint.h>
9
10 #include <string>
11 #include <vector>
12
13 #include "base/macros.h"
14 #include "base/memory/ref_counted.h"
15 #include "base/memory/scoped_ptr.h"
16 #include "base/memory/weak_ptr.h"
17 #include "base/sequenced_task_runner_helpers.h"
18 #include "build/build_config.h"
19 #include "content/child/npapi/webplugin_delegate.h"
20 #include "content/public/common/webplugininfo.h"
21 #include "ipc/ipc_listener.h"
22 #include "ipc/ipc_message.h"
23 #include "ipc/ipc_sender.h"
24 #include "skia/ext/refptr.h"
25 #include "ui/gfx/geometry/rect.h"
26 #include "ui/gfx/native_widget_types.h"
27 #include "url/gurl.h"
28
29 #if defined(OS_MACOSX)
30 #include "base/containers/hash_tables.h"
31 #endif
32
33 struct NPObject;
34 struct PluginHostMsg_URLRequest_Params;
35 class SkBitmap;
36
37 namespace base {
38 class WaitableEvent;
39 }
40
41
42 namespace content {
43 class PluginChannelHost;
44 class RenderFrameImpl;
45 class RenderViewImpl;
46 class SharedMemoryBitmap;
47 class WebPluginImpl;
48
49 // An implementation of WebPluginDelegate that proxies all calls to
50 // the plugin process.
51 class WebPluginDelegateProxy
52 : public WebPluginDelegate,
53 public IPC::Listener,
54 public IPC::Sender,
55 public base::SupportsWeakPtr<WebPluginDelegateProxy> {
56 public:
57 WebPluginDelegateProxy(WebPluginImpl* plugin,
58 const std::string& mime_type,
59 const base::WeakPtr<RenderViewImpl>& render_view,
60 RenderFrameImpl* render_frame);
61
62 // WebPluginDelegate implementation:
63 void PluginDestroyed() override;
64 bool Initialize(const GURL& url,
65 const std::vector<std::string>& arg_names,
66 const std::vector<std::string>& arg_values,
67 bool load_manually) override;
68 void UpdateGeometry(const gfx::Rect& window_rect,
69 const gfx::Rect& clip_rect) override;
70 void Paint(SkCanvas* canvas, const gfx::Rect& rect) override;
71 void SetFocus(bool focused) override;
72 bool HandleInputEvent(const blink::WebInputEvent& event,
73 WebCursor::CursorInfo* cursor) override;
74 int GetProcessId() override;
75
76 // Informs the plugin that its containing content view has gained or lost
77 // first responder status.
78 virtual void SetContentAreaFocus(bool has_focus);
79 #if defined(OS_MACOSX)
80 // Informs the plugin that its enclosing window has gained or lost focus.
81 virtual void SetWindowFocus(bool window_has_focus);
82 // Informs the plugin that its container (window/tab) has changed visibility.
83 virtual void SetContainerVisibility(bool is_visible);
84 // Informs the plugin that its enclosing window's frame has changed.
85 virtual void WindowFrameChanged(gfx::Rect window_frame, gfx::Rect view_frame);
86 // Informs the plugin that plugin IME has completed.
87 // If |text| is empty, composition was cancelled.
88 virtual void ImeCompositionCompleted(const base::string16& text,
89 int plugin_id);
90 #endif
91
92 // IPC::Listener implementation:
93 bool OnMessageReceived(const IPC::Message& msg) override;
94 void OnChannelError() override;
95
96 // IPC::Sender implementation:
97 bool Send(IPC::Message* msg) override;
98
99 protected:
100 friend class base::DeleteHelper<WebPluginDelegateProxy>;
101 ~WebPluginDelegateProxy() override;
102
103 private:
104 struct SharedBitmap {
105 SharedBitmap();
106 ~SharedBitmap();
107
108 scoped_ptr<SharedMemoryBitmap> bitmap;
109 skia::RefPtr<SkCanvas> canvas;
110 };
111
112 // Message handlers for messages that proxy WebPlugin methods, which
113 // we translate into calls to the real WebPlugin.
114 void OnCompleteURL(const std::string& url_in, std::string* url_out,
115 bool* result);
116 void OnHandleURLRequest(const PluginHostMsg_URLRequest_Params& params);
117 void OnInvalidateRect(const gfx::Rect& rect);
118 void OnResolveProxy(const GURL& url, bool* result, std::string* proxy_list);
119 void OnSetCookie(const GURL& url,
120 const GURL& first_party_for_cookies,
121 const std::string& cookie);
122 void OnGetCookies(const GURL& url, const GURL& first_party_for_cookies,
123 std::string* cookies);
124 void OnCancelDocumentLoad();
125 void OnInitiateHTTPRangeRequest(const std::string& url,
126 const std::string& range_info,
127 int range_request_id);
128 void OnDidStartLoading();
129 void OnDidStopLoading();
130 #if defined(OS_MACOSX)
131 void OnFocusChanged(bool focused);
132 void OnStartIme();
133 // Accelerated (Core Animation) plugin implementation.
134 void OnAcceleratedPluginEnabledRendering();
135 void OnAcceleratedPluginAllocatedIOSurface(int32_t width,
136 int32_t height,
137 uint32_t surface_id);
138 void OnAcceleratedPluginSwappedIOSurface();
139 #endif
140 // Helper function that sends the UpdateGeometry message.
141 void SendUpdateGeometry(bool bitmaps_changed);
142
143 // Copies the given rectangle from the back-buffer transport_stores_ bitmap to
144 // the front-buffer transport_stores_ bitmap.
145 void CopyFromBackBufferToFrontBuffer(const gfx::Rect& rect);
146
147 // Updates the front-buffer with the given rectangle from the back-buffer,
148 // either by copying the rectangle or flipping the buffers.
149 void UpdateFrontBuffer(const gfx::Rect& rect, bool allow_buffer_flipping);
150
151 // Clears the shared memory section and canvases used for windowless plugins.
152 void ResetWindowlessBitmaps();
153
154 int front_buffer_index() const {
155 return front_buffer_index_;
156 }
157
158 int back_buffer_index() const {
159 return 1 - front_buffer_index_;
160 }
161
162 SkCanvas* front_buffer_canvas() const {
163 return transport_stores_[front_buffer_index()].canvas.get();
164 }
165
166 SkCanvas* back_buffer_canvas() const {
167 return transport_stores_[back_buffer_index()].canvas.get();
168 }
169
170 SharedMemoryBitmap* front_buffer_bitmap() const {
171 return transport_stores_[front_buffer_index()].bitmap.get();
172 }
173
174 SharedMemoryBitmap* back_buffer_bitmap() const {
175 return transport_stores_[back_buffer_index()].bitmap.get();
176 }
177
178 #if !defined(OS_WIN)
179 // Creates a process-local memory section and canvas. PlatformCanvas on
180 // Windows only works with a DIB, not arbitrary memory.
181 bool CreateLocalBitmap(std::vector<uint8_t>* memory,
182 skia::RefPtr<SkCanvas>* canvas);
183 #endif
184
185 // Creates a shared memory section and canvas.
186 bool CreateSharedBitmap(scoped_ptr<SharedMemoryBitmap>* memory,
187 skia::RefPtr<SkCanvas>* canvas);
188
189 // Called for cleanup during plugin destruction. Normally right before the
190 // plugin window gets destroyed, or when the plugin has crashed (at which
191 // point the window has already been destroyed).
192 void WillDestroyWindow();
193
194 #if defined(OS_WIN)
195 // Returns true if we should update the plugin geometry synchronously.
196 bool UseSynchronousGeometryUpdates();
197 #endif
198
199 base::WeakPtr<RenderViewImpl> render_view_;
200 RenderFrameImpl* render_frame_;
201 WebPluginImpl* plugin_;
202 bool uses_shared_bitmaps_;
203 #if defined(OS_MACOSX)
204 bool uses_compositor_;
205 #endif
206 scoped_refptr<PluginChannelHost> channel_host_;
207 std::string mime_type_;
208 int instance_id_;
209 WebPluginInfo info_;
210
211 gfx::Rect plugin_rect_;
212 gfx::Rect clip_rect_;
213
214 // Bitmap for crashed plugin
215 SkBitmap* sad_plugin_;
216
217 // True if we got an invalidate from the plugin and are waiting for a paint.
218 bool invalidate_pending_;
219
220 // If the plugin is transparent or not.
221 bool transparent_;
222
223 // The index in the transport_stores_ array of the current front buffer
224 // (i.e., the buffer to display).
225 int front_buffer_index_;
226 SharedBitmap transport_stores_[2];
227 // This lets us know the total portion of the transport store that has been
228 // painted since the buffers were created.
229 gfx::Rect transport_store_painted_;
230 // This is a bounding box on the portion of the front-buffer that was painted
231 // on the last buffer flip and which has not yet been re-painted in the
232 // back-buffer.
233 gfx::Rect front_buffer_diff_;
234
235 // The url of the main frame hosting the plugin.
236 GURL page_url_;
237
238 DISALLOW_COPY_AND_ASSIGN(WebPluginDelegateProxy);
239 };
240
241 } // namespace content
242
243 #endif // CONTENT_RENDERER_NPAPI_WEBPLUGIN_DELEGATE_PROXY_H_
OLDNEW
« no previous file with comments | « content/renderer/npapi/plugin_channel_host.cc ('k') | content/renderer/npapi/webplugin_delegate_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698