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

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

Issue 5040: Fix painting problem with transparent plugins because plugins were ignoring t... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « chrome/plugin/webplugin_delegate_stub.cc ('k') | chrome/plugin/webplugin_proxy.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 #ifndef CHROME_PLUGIN_PLUGIN_WEBPLUGIN_PROXY_H__ 5 #ifndef CHROME_PLUGIN_PLUGIN_WEBPLUGIN_PROXY_H__
6 #define CHROME_PLUGIN_PLUGIN_WEBPLUGIN_PROXY_H__ 6 #define CHROME_PLUGIN_PLUGIN_WEBPLUGIN_PROXY_H__
7 7
8 #include "base/hash_tables.h" 8 #include "base/hash_tables.h"
9 #include "base/ref_counted.h" 9 #include "base/ref_counted.h"
10 #include "base/scoped_handle.h" 10 #include "base/scoped_handle.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 CPBrowsingContext GetCPBrowsingContext(); 55 CPBrowsingContext GetCPBrowsingContext();
56 56
57 // Retrieves the WebPluginProxy for the given context that was returned by 57 // Retrieves the WebPluginProxy for the given context that was returned by
58 // GetCPBrowsingContext, or NULL if not found. 58 // GetCPBrowsingContext, or NULL if not found.
59 static WebPluginProxy* FromCPBrowsingContext(CPBrowsingContext context); 59 static WebPluginProxy* FromCPBrowsingContext(CPBrowsingContext context);
60 60
61 // Returns a WebPluginResourceClient object given its id, or NULL if no 61 // Returns a WebPluginResourceClient object given its id, or NULL if no
62 // object with that id exists. 62 // object with that id exists.
63 WebPluginResourceClient* GetResourceClient(int id); 63 WebPluginResourceClient* GetResourceClient(int id);
64 64
65 // For windowless plugins, paints the given rectangle into the local buffer.
66 void Paint(const gfx::Rect& rect);
67
68 // Callback from the renderer to let us know that a paint occurred.
69 void DidPaint();
70
65 // Notification received on a plugin issued resource request 71 // Notification received on a plugin issued resource request
66 // creation. 72 // creation.
67 void OnResourceCreated(int resource_id, HANDLE cookie); 73 void OnResourceCreated(int resource_id, HANDLE cookie);
68 74
69 void HandleURLRequest(const char *method, 75 void HandleURLRequest(const char *method,
70 bool is_javascript_url, 76 bool is_javascript_url,
71 const char* target, unsigned int len, 77 const char* target, unsigned int len,
72 const char* buf, bool is_file_data, 78 const char* buf, bool is_file_data,
73 bool notify, const char* url, 79 bool notify, const char* url,
74 void* notify_data, bool popups_allowed); 80 void* notify_data, bool popups_allowed);
75 81
76 void UpdateGeometry(const gfx::Rect& window_rect, 82 void UpdateGeometry(const gfx::Rect& window_rect,
77 const gfx::Rect& clip_rect, 83 const gfx::Rect& clip_rect,
78 bool visible, 84 bool visible,
79 const SharedMemoryHandle& windowless_buffer, 85 const SharedMemoryHandle& windowless_buffer,
80 const SharedMemoryLock& lock); 86 const SharedMemoryHandle& background_buffer);
81 87
82 void CancelDocumentLoad(); 88 void CancelDocumentLoad();
83 89
84 void InitiateHTTPRangeRequest(const char* url, 90 void InitiateHTTPRangeRequest(const char* url,
85 const char* range_info, 91 const char* range_info,
86 void* existing_stream, 92 void* existing_stream,
87 bool notify_needed, 93 bool notify_needed,
88 HANDLE notify_data); 94 HANDLE notify_data);
89 95
90 private: 96 private:
91 bool Send(IPC::Message* msg); 97 bool Send(IPC::Message* msg);
92 98
93 // Called periodically so that we can paint windowless plugins. 99 // Updates the shared memory section where windowless plugins paint.
94 void OnPaintTimerFired(); 100 void SetWindowlessBuffer(const SharedMemoryHandle& windowless_buffer,
101 const SharedMemoryHandle& background_buffer);
95 102
96 // Updates the shared memory section where windowless plugins paint. 103 // Converts a shared memory section handle from the renderer process into a
97 void SetWindowlessBuffer(const SharedMemoryHandle& handle, 104 // bitmap and hdc that are mapped to this process.
98 const SharedMemoryLock& lock); 105 void ConvertBuffer(const SharedMemoryHandle& buffer,
106 ScopedHandle* shared_section,
107 ScopedBitmap* bitmap,
108 ScopedHDC* hdc);
99 109
100 // Called when a plugin's origin moves, so that we can update the world 110 // Called when a plugin's origin moves, so that we can update the world
101 // transform of the local HDC. 111 // transform of the local HDC.
102 void UpdateTransform(); 112 void UpdateTransform();
103 113
104 typedef base::hash_map<int, WebPluginResourceClient*> ResourceClientMap; 114 typedef base::hash_map<int, WebPluginResourceClient*> ResourceClientMap;
105 ResourceClientMap resource_clients_; 115 ResourceClientMap resource_clients_;
106 116
107 scoped_refptr<PluginChannel> channel_; 117 scoped_refptr<PluginChannel> channel_;
108 int route_id_; 118 int route_id_;
109 NPObject* window_npobject_; 119 NPObject* window_npobject_;
110 NPObject* plugin_element_; 120 NPObject* plugin_element_;
111 WebPluginDelegateImpl* delegate_; 121 WebPluginDelegateImpl* delegate_;
122 gfx::Rect damaged_rect_;
123 bool waiting_for_paint_;
112 uint32 cp_browsing_context_; 124 uint32 cp_browsing_context_;
113 ScopedHandle modal_dialog_event_; 125 ScopedHandle modal_dialog_event_;
114 126
115 // Used to desynchronize windowless painting. We accumulate invalidates and 127 // Variables used for desynchronized windowless plugin painting. See note in
116 // paint into a shared buffer when our repeating timer fires. After painting 128 // webplugin_delegate_proxy.h for how this works.
117 // we tell the renderer asynchronously and it paints from the buffer. This 129
118 // allows the renderer to paint without a blocking call, which improves 130 // These hold the bitmap where the plugin draws.
119 // performance, and lets us control the frame rate at which we paint.
120 gfx::Rect damaged_rect_;
121 base::RepeatingTimer<WebPluginProxy> paint_timer_;
122 ScopedHandle windowless_shared_section_; 131 ScopedHandle windowless_shared_section_;
123 ScopedBitmap windowless_bitmap_; 132 ScopedBitmap windowless_bitmap_;
124 ScopedHDC windowless_hdc_; 133 ScopedHDC windowless_hdc_;
125 ScopedHandle windowless_buffer_lock_; 134
135 // These hold the bitmap of the background image.
136 ScopedHandle background_shared_section_;
137 ScopedBitmap background_bitmap_;
138 ScopedHDC background_hdc_;
126 }; 139 };
127 140
128 #endif // CHROME_PLUGIN_PLUGIN_WEBPLUGIN_PROXY_H__ 141 #endif // CHROME_PLUGIN_PLUGIN_WEBPLUGIN_PROXY_H__
OLDNEW
« no previous file with comments | « chrome/plugin/webplugin_delegate_stub.cc ('k') | chrome/plugin/webplugin_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698