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

Side by Side Diff: chrome/plugin/webplugin_proxy.cc

Issue 20208: Lots of small nits to help to split off webkit.dll.... (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 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
« no previous file with comments | « chrome/plugin/webplugin_proxy.h ('k') | chrome/renderer/render_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/plugin/webplugin_proxy.h" 5 #include "chrome/plugin/webplugin_proxy.h"
6 6
7 #include "base/gfx/gdi_util.h" 7 #include "base/gfx/gdi_util.h"
8 #include "base/scoped_handle.h" 8 #include "base/scoped_handle.h"
9 #include "base/shared_memory.h" 9 #include "base/shared_memory.h"
10 #include "base/singleton.h" 10 #include "base/singleton.h"
11 #include "base/waitable_event.h" 11 #include "base/waitable_event.h"
12 #include "chrome/common/gfx/chrome_canvas.h" 12 #include "chrome/common/gfx/chrome_canvas.h"
13 #include "chrome/common/plugin_messages.h" 13 #include "chrome/common/plugin_messages.h"
14 #include "chrome/common/win_util.h" 14 #include "chrome/common/win_util.h"
15 #include "chrome/plugin/npobject_proxy.h" 15 #include "chrome/plugin/npobject_proxy.h"
16 #include "chrome/plugin/npobject_util.h" 16 #include "chrome/plugin/npobject_util.h"
17 #include "chrome/plugin/plugin_channel.h" 17 #include "chrome/plugin/plugin_channel.h"
18 #include "chrome/plugin/plugin_thread.h" 18 #include "chrome/plugin/plugin_thread.h"
19 #include "chrome/plugin/webplugin_delegate_stub.h" 19 #include "chrome/plugin/webplugin_delegate_stub.h"
20 #include "skia/ext/platform_device.h" 20 #include "skia/ext/platform_device.h"
21 #include "webkit/glue/plugins/webplugin_delegate_impl.h" 21 #include "webkit/glue/webplugin_delegate.h"
22 22
23 typedef std::map<CPBrowsingContext, WebPluginProxy*> ContextMap; 23 typedef std::map<CPBrowsingContext, WebPluginProxy*> ContextMap;
24 static ContextMap& GetContextMap() { 24 static ContextMap& GetContextMap() {
25 return *Singleton<ContextMap>::get(); 25 return *Singleton<ContextMap>::get();
26 } 26 }
27 27
28 WebPluginProxy::WebPluginProxy( 28 WebPluginProxy::WebPluginProxy(
29 PluginChannel* channel, 29 PluginChannel* channel,
30 int route_id, 30 int route_id,
31 WebPluginDelegateImpl* delegate, 31 WebPluginDelegate* delegate,
32 HANDLE modal_dialog_event) 32 HANDLE modal_dialog_event)
33 : channel_(channel), 33 : channel_(channel),
34 route_id_(route_id), 34 route_id_(route_id),
35 cp_browsing_context_(0), 35 cp_browsing_context_(0),
36 window_npobject_(NULL), 36 window_npobject_(NULL),
37 plugin_element_(NULL), 37 plugin_element_(NULL),
38 delegate_(delegate), 38 delegate_(delegate),
39 waiting_for_paint_(false), 39 waiting_for_paint_(false),
40 #pragma warning(suppress: 4355) // can use this 40 #pragma warning(suppress: 4355) // can use this
41 runnable_method_factory_(this), 41 runnable_method_factory_(this),
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 Send(new PluginHostMsg_SetWindow(route_id_, window, 102 Send(new PluginHostMsg_SetWindow(route_id_, window,
103 pump_messages_event_for_renderer)); 103 pump_messages_event_for_renderer));
104 } 104 }
105 105
106 void WebPluginProxy::CancelResource(int id) { 106 void WebPluginProxy::CancelResource(int id) {
107 Send(new PluginHostMsg_CancelResource(route_id_, id)); 107 Send(new PluginHostMsg_CancelResource(route_id_, id));
108 resource_clients_.erase(id); 108 resource_clients_.erase(id);
109 } 109 }
110 110
111 void WebPluginProxy::Invalidate() { 111 void WebPluginProxy::Invalidate() {
112 gfx::Rect rect(0, 0, delegate_->rect().width(), delegate_->rect().height()); 112 gfx::Rect rect(0, 0,
113 delegate_->GetRect().width(),
114 delegate_->GetRect().height());
113 InvalidateRect(rect); 115 InvalidateRect(rect);
114 } 116 }
115 117
116 void WebPluginProxy::InvalidateRect(const gfx::Rect& rect) { 118 void WebPluginProxy::InvalidateRect(const gfx::Rect& rect) {
117 damaged_rect_ = damaged_rect_.Union(rect); 119 damaged_rect_ = damaged_rect_.Union(rect);
118 // Ignore NPN_InvalidateRect calls with empty rects. Also don't send an 120 // Ignore NPN_InvalidateRect calls with empty rects. Also don't send an
119 // invalidate if it's outside the clipping region, since if we did it won't 121 // invalidate if it's outside the clipping region, since if we did it won't
120 // lead to a paint and we'll be stuck waiting forever for a DidPaint response. 122 // lead to a paint and we'll be stuck waiting forever for a DidPaint response.
121 if (rect.IsEmpty() || !delegate_->clip_rect().Intersects(rect)) 123 if (rect.IsEmpty() || !delegate_->GetClipRect().Intersects(rect))
122 return; 124 return;
123 125
124 // Only send a single InvalidateRect message at a time. From DidPaint we 126 // Only send a single InvalidateRect message at a time. From DidPaint we
125 // will dispatch an additional InvalidateRect message if necessary. 127 // will dispatch an additional InvalidateRect message if necessary.
126 if (!waiting_for_paint_) { 128 if (!waiting_for_paint_) {
127 waiting_for_paint_ = true; 129 waiting_for_paint_ = true;
128 // Invalidates caused by calls to NPN_InvalidateRect/NPN_InvalidateRgn 130 // Invalidates caused by calls to NPN_InvalidateRect/NPN_InvalidateRgn
129 // need to be painted asynchronously as per the NPAPI spec. 131 // need to be painted asynchronously as per the NPAPI spec.
130 MessageLoop::current()->PostTask(FROM_HERE, 132 MessageLoop::current()->PostTask(FROM_HERE,
131 runnable_method_factory_.NewRunnableMethod( 133 runnable_method_factory_.NewRunnableMethod(
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 bool notify, const char* url, 262 bool notify, const char* url,
261 void* notify_data, bool popups_allowed) { 263 void* notify_data, bool popups_allowed) {
262 if (!url) { 264 if (!url) {
263 NOTREACHED(); 265 NOTREACHED();
264 return; 266 return;
265 } 267 }
266 268
267 if (!target && (0 == _strcmpi(method, "GET"))) { 269 if (!target && (0 == _strcmpi(method, "GET"))) {
268 // Please refer to https://bugzilla.mozilla.org/show_bug.cgi?id=366082 270 // Please refer to https://bugzilla.mozilla.org/show_bug.cgi?id=366082
269 // for more details on this. 271 // for more details on this.
270 if (delegate_->quirks() & 272 if (delegate_->GetQuirks() &
271 WebPluginDelegateImpl::PLUGIN_QUIRK_BLOCK_NONSTANDARD_GETURL_REQUESTS) { 273 WebPluginDelegate::PLUGIN_QUIRK_BLOCK_NONSTANDARD_GETURL_REQUESTS) {
272 GURL request_url(url); 274 GURL request_url(url);
273 if (!request_url.SchemeIs("http") && !request_url.SchemeIs("https") && 275 if (!request_url.SchemeIs("http") && !request_url.SchemeIs("https") &&
274 !request_url.SchemeIs("ftp")) { 276 !request_url.SchemeIs("ftp")) {
275 return; 277 return;
276 } 278 }
277 } 279 }
278 } 280 }
279 281
280 PluginHostMsg_URLRequest_Params params; 282 PluginHostMsg_URLRequest_Params params;
281 params.method = method; 283 params.method = method;
(...skipping 15 matching lines...) Expand all
297 Send(new PluginHostMsg_URLRequest(route_id_, params)); 299 Send(new PluginHostMsg_URLRequest(route_id_, params));
298 } 300 }
299 301
300 void WebPluginProxy::Paint(const gfx::Rect& rect) { 302 void WebPluginProxy::Paint(const gfx::Rect& rect) {
301 if (!windowless_hdc_) 303 if (!windowless_hdc_)
302 return; 304 return;
303 305
304 // Clear the damaged area so that if the plugin doesn't paint there we won't 306 // Clear the damaged area so that if the plugin doesn't paint there we won't
305 // end up with the old values. 307 // end up with the old values.
306 gfx::Rect offset_rect = rect; 308 gfx::Rect offset_rect = rect;
307 offset_rect.Offset(delegate_->rect().x(), delegate_->rect().y()); 309 offset_rect.Offset(delegate_->GetRect().origin());
308 if (!background_hdc_) { 310 if (!background_hdc_) {
309 FillRect(windowless_hdc_, &offset_rect.ToRECT(), 311 FillRect(windowless_hdc_, &offset_rect.ToRECT(),
310 static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH))); 312 static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH)));
311 } else { 313 } else {
312 BitBlt(windowless_hdc_, offset_rect.x(), offset_rect.y(), 314 BitBlt(windowless_hdc_, offset_rect.x(), offset_rect.y(),
313 offset_rect.width(), offset_rect.height(), background_hdc_, 315 offset_rect.width(), offset_rect.height(), background_hdc_,
314 rect.x(), rect.y(), SRCCOPY); 316 rect.x(), rect.y(), SRCCOPY);
315 } 317 }
316 318
317 // Before we send the invalidate, paint so that renderer uses the updated 319 // Before we send the invalidate, paint so that renderer uses the updated
318 // bitmap. 320 // bitmap.
319 delegate_->Paint(windowless_hdc_, offset_rect); 321 delegate_->Paint(windowless_hdc_, offset_rect);
320 } 322 }
321 323
322 void WebPluginProxy::UpdateGeometry( 324 void WebPluginProxy::UpdateGeometry(
323 const gfx::Rect& window_rect, 325 const gfx::Rect& window_rect,
324 const gfx::Rect& clip_rect, 326 const gfx::Rect& clip_rect,
325 const base::SharedMemoryHandle& windowless_buffer, 327 const base::SharedMemoryHandle& windowless_buffer,
326 const base::SharedMemoryHandle& background_buffer) { 328 const base::SharedMemoryHandle& background_buffer) {
327 gfx::Rect old = delegate_->rect(); 329 gfx::Rect old = delegate_->GetRect();
328 gfx::Rect old_clip_rect = delegate_->clip_rect(); 330 gfx::Rect old_clip_rect = delegate_->GetClipRect();
329 331
330 bool moved = delegate_->rect().x() != window_rect.x() || 332 bool moved = old.x() != window_rect.x() || old.y() != window_rect.y();
331 delegate_->rect().y() != window_rect.y();
332 delegate_->UpdateGeometry(window_rect, clip_rect); 333 delegate_->UpdateGeometry(window_rect, clip_rect);
333 if (windowless_buffer) { 334 if (windowless_buffer) {
334 // The plugin's rect changed, so now we have a new buffer to draw into. 335 // The plugin's rect changed, so now we have a new buffer to draw into.
335 SetWindowlessBuffer(windowless_buffer, background_buffer); 336 SetWindowlessBuffer(windowless_buffer, background_buffer);
336 } else if (moved) { 337 } else if (moved) {
337 // The plugin moved, so update our world transform. 338 // The plugin moved, so update our world transform.
338 UpdateTransform(); 339 UpdateTransform();
339 } 340 }
340 // Send over any pending invalidates which occured when the plugin was 341 // Send over any pending invalidates which occured when the plugin was
341 // off screen. 342 // off screen.
342 if (delegate_->windowless() && !clip_rect.IsEmpty() && 343 if (delegate_->IsWindowless() && !clip_rect.IsEmpty() &&
343 old_clip_rect.IsEmpty() && !damaged_rect_.IsEmpty()) { 344 old_clip_rect.IsEmpty() && !damaged_rect_.IsEmpty()) {
344 InvalidateRect(damaged_rect_); 345 InvalidateRect(damaged_rect_);
345 } 346 }
346 } 347 }
347 348
348 void WebPluginProxy::SetWindowlessBuffer( 349 void WebPluginProxy::SetWindowlessBuffer(
349 const base::SharedMemoryHandle& windowless_buffer, 350 const base::SharedMemoryHandle& windowless_buffer,
350 const base::SharedMemoryHandle& background_buffer) { 351 const base::SharedMemoryHandle& background_buffer) {
351 // Convert the shared memory handle to a handle that works in our process, 352 // Convert the shared memory handle to a handle that works in our process,
352 // and then use that to create an HDC. 353 // and then use that to create an HDC.
(...skipping 17 matching lines...) Expand all
370 shared_section->Set(win_util::GetSectionFromProcess( 371 shared_section->Set(win_util::GetSectionFromProcess(
371 buffer, channel_->renderer_handle(), false)); 372 buffer, channel_->renderer_handle(), false));
372 if (shared_section->Get() == NULL) { 373 if (shared_section->Get() == NULL) {
373 NOTREACHED(); 374 NOTREACHED();
374 return; 375 return;
375 } 376 }
376 377
377 void* data = NULL; 378 void* data = NULL;
378 HDC screen_dc = GetDC(NULL); 379 HDC screen_dc = GetDC(NULL);
379 BITMAPINFOHEADER bitmap_header; 380 BITMAPINFOHEADER bitmap_header;
380 gfx::CreateBitmapHeader(delegate_->rect().width(), 381 gfx::CreateBitmapHeader(delegate_->GetRect().width(),
381 delegate_->rect().height(), 382 delegate_->GetRect().height(),
382 &bitmap_header); 383 &bitmap_header);
383 bitmap->Set(CreateDIBSection( 384 bitmap->Set(CreateDIBSection(
384 screen_dc, reinterpret_cast<const BITMAPINFO*>(&bitmap_header), 385 screen_dc, reinterpret_cast<const BITMAPINFO*>(&bitmap_header),
385 DIB_RGB_COLORS, &data, shared_section->Get(), 0)); 386 DIB_RGB_COLORS, &data, shared_section->Get(), 0));
386 ReleaseDC(NULL, screen_dc); 387 ReleaseDC(NULL, screen_dc);
387 if (bitmap->Get() == NULL) { 388 if (bitmap->Get() == NULL) {
388 NOTREACHED(); 389 NOTREACHED();
389 return; 390 return;
390 } 391 }
391 392
392 hdc->Set(CreateCompatibleDC(NULL)); 393 hdc->Set(CreateCompatibleDC(NULL));
393 if (hdc->Get() == NULL) { 394 if (hdc->Get() == NULL) {
394 NOTREACHED(); 395 NOTREACHED();
395 return; 396 return;
396 } 397 }
397 398
398 skia::PlatformDeviceWin::InitializeDC(hdc->Get()); 399 skia::PlatformDeviceWin::InitializeDC(hdc->Get());
399 SelectObject(hdc->Get(), bitmap->Get()); 400 SelectObject(hdc->Get(), bitmap->Get());
400 } 401 }
401 402
402 void WebPluginProxy::UpdateTransform() { 403 void WebPluginProxy::UpdateTransform() {
403 if (!windowless_hdc_) 404 if (!windowless_hdc_)
404 return; 405 return;
405 406
406 XFORM xf; 407 XFORM xf;
407 xf.eDx = static_cast<FLOAT>(-delegate_->rect().x()); 408 xf.eDx = static_cast<FLOAT>(-delegate_->GetRect().x());
408 xf.eDy = static_cast<FLOAT>(-delegate_->rect().y()); 409 xf.eDy = static_cast<FLOAT>(-delegate_->GetRect().y());
409 xf.eM11 = 1; 410 xf.eM11 = 1;
410 xf.eM21 = 0; 411 xf.eM21 = 0;
411 xf.eM12 = 0; 412 xf.eM12 = 0;
412 xf.eM22 = 1; 413 xf.eM22 = 1;
413 SetWorldTransform(windowless_hdc_, &xf); 414 SetWorldTransform(windowless_hdc_, &xf);
414 } 415 }
415 416
416 void WebPluginProxy::CancelDocumentLoad() { 417 void WebPluginProxy::CancelDocumentLoad() {
417 Send(new PluginHostMsg_CancelDocumentLoad(route_id_)); 418 Send(new PluginHostMsg_CancelDocumentLoad(route_id_));
418 } 419 }
419 420
420 void WebPluginProxy::InitiateHTTPRangeRequest(const char* url, 421 void WebPluginProxy::InitiateHTTPRangeRequest(const char* url,
421 const char* range_info, 422 const char* range_info,
422 void* existing_stream, 423 void* existing_stream,
423 bool notify_needed, 424 bool notify_needed,
424 HANDLE notify_data) { 425 HANDLE notify_data) {
425 426
426 Send(new PluginHostMsg_InitiateHTTPRangeRequest(route_id_, url, 427 Send(new PluginHostMsg_InitiateHTTPRangeRequest(route_id_, url,
427 range_info, existing_stream, 428 range_info, existing_stream,
428 notify_needed, notify_data)); 429 notify_needed, notify_data));
429 } 430 }
430 431
431 void WebPluginProxy::OnPaint(const gfx::Rect& damaged_rect) { 432 void WebPluginProxy::OnPaint(const gfx::Rect& damaged_rect) {
432 Paint(damaged_rect); 433 Paint(damaged_rect);
433 Send(new PluginHostMsg_InvalidateRect(route_id_, damaged_rect)); 434 Send(new PluginHostMsg_InvalidateRect(route_id_, damaged_rect));
434 } 435 }
OLDNEW
« no previous file with comments | « chrome/plugin/webplugin_proxy.h ('k') | chrome/renderer/render_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698