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

Side by Side Diff: content/child/npapi/webplugin_delegate_impl.cc

Issue 1815593002: Remove windowed NPAPI code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@make_test_plugin_windowless
Patch Set: rebase Created 4 years, 9 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 "content/child/npapi/webplugin_delegate_impl.h" 5 #include "content/child/npapi/webplugin_delegate_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 argc++; 79 argc++;
80 } 80 }
81 81
82 creation_succeeded_ = instance_->Start( 82 creation_succeeded_ = instance_->Start(
83 url, argn.get(), argv.get(), argc, load_manually); 83 url, argn.get(), argv.get(), argc, load_manually);
84 if (!creation_succeeded_) { 84 if (!creation_succeeded_) {
85 VLOG(1) << "Couldn't start plugin instance"; 85 VLOG(1) << "Couldn't start plugin instance";
86 return false; 86 return false;
87 } 87 }
88 88
89 windowless_ = instance_->windowless();
90 if (!windowless_) {
91 if (!WindowedCreatePlugin()) {
92 VLOG(1) << "Couldn't create windowed plugin";
93 return false;
94 }
95 }
96
97 bool should_load = PlatformInitialize(); 89 bool should_load = PlatformInitialize();
98 90
99 plugin_url_ = url.spec(); 91 plugin_url_ = url.spec();
100 92
101 return should_load; 93 return should_load;
102 } 94 }
103 95
104 void WebPluginDelegateImpl::DestroyInstance() { 96 void WebPluginDelegateImpl::DestroyInstance() {
105 if (instance_.get() && (instance_->npp()->ndata != NULL)) { 97 if (instance_.get() && (instance_->npp()->ndata != NULL)) {
106 window_.window = NULL; 98 window_.window = NULL;
(...skipping 19 matching lines...) Expand all
126 if (first_set_window_call_) { 118 if (first_set_window_call_) {
127 first_set_window_call_ = false; 119 first_set_window_call_ = false;
128 // Plugins like media player on Windows have a bug where in they handle the 120 // Plugins like media player on Windows have a bug where in they handle the
129 // first geometry update and ignore the rest resulting in painting issues. 121 // first geometry update and ignore the rest resulting in painting issues.
130 // This quirk basically ignores the first set window call sequence for 122 // This quirk basically ignores the first set window call sequence for
131 // these plugins and has been tested for Windows plugins only. 123 // these plugins and has been tested for Windows plugins only.
132 if (quirks_ & PLUGIN_QUIRK_IGNORE_FIRST_SETWINDOW_CALL) 124 if (quirks_ & PLUGIN_QUIRK_IGNORE_FIRST_SETWINDOW_CALL)
133 return; 125 return;
134 } 126 }
135 127
136 if (windowless_) { 128 WindowlessUpdateGeometry(window_rect, clip_rect);
137 WindowlessUpdateGeometry(window_rect, clip_rect);
138 } else {
139 WindowedUpdateGeometry(window_rect, clip_rect);
140 }
141 } 129 }
142 130
143 void WebPluginDelegateImpl::SetFocus(bool focused) { 131 void WebPluginDelegateImpl::SetFocus(bool focused) {
144 DCHECK(windowless_);
145 // This is called when internal WebKit focus (the focused element on the page) 132 // This is called when internal WebKit focus (the focused element on the page)
146 // changes, but plugins need to know about OS-level focus, so we have an extra 133 // changes, but plugins need to know about OS-level focus, so we have an extra
147 // layer of focus tracking. 134 // layer of focus tracking.
148 // 135 //
149 // On Windows, historically browsers did not set focus events to windowless 136 // On Windows, historically browsers did not set focus events to windowless
150 // plugins when the toplevel window focus changes. Sending such focus events 137 // plugins when the toplevel window focus changes. Sending such focus events
151 // breaks full screen mode in Flash because it will come out of full screen 138 // breaks full screen mode in Flash because it will come out of full screen
152 // mode when it loses focus, and its full screen window causes the browser to 139 // mode when it loses focus, and its full screen window causes the browser to
153 // lose focus. 140 // lose focus.
154 has_webkit_focus_ = focused; 141 has_webkit_focus_ = focused;
155 #if !defined(OS_WIN) 142 #if !defined(OS_WIN)
156 if (containing_view_has_focus_) 143 if (containing_view_has_focus_)
157 SetPluginHasFocus(focused); 144 SetPluginHasFocus(focused);
158 #else 145 #else
159 SetPluginHasFocus(focused); 146 SetPluginHasFocus(focused);
160 #endif 147 #endif
161 } 148 }
162 149
163 void WebPluginDelegateImpl::SetPluginHasFocus(bool focused) { 150 void WebPluginDelegateImpl::SetPluginHasFocus(bool focused) {
164 if (focused == plugin_has_focus_) 151 if (focused == plugin_has_focus_)
165 return; 152 return;
166 if (PlatformSetPluginHasFocus(focused)) 153 if (PlatformSetPluginHasFocus(focused))
167 plugin_has_focus_ = focused; 154 plugin_has_focus_ = focused;
168 } 155 }
169 156
170 void WebPluginDelegateImpl::SetContentAreaHasFocus(bool has_focus) { 157 void WebPluginDelegateImpl::SetContentAreaHasFocus(bool has_focus) {
171 containing_view_has_focus_ = has_focus; 158 containing_view_has_focus_ = has_focus;
172 if (!windowless_)
173 return;
174 #if !defined(OS_WIN) // See SetFocus above. 159 #if !defined(OS_WIN) // See SetFocus above.
175 SetPluginHasFocus(containing_view_has_focus_ && has_webkit_focus_); 160 SetPluginHasFocus(containing_view_has_focus_ && has_webkit_focus_);
176 #endif 161 #endif
177 } 162 }
178 163
179 NPObject* WebPluginDelegateImpl::GetPluginScriptableObject() { 164 NPObject* WebPluginDelegateImpl::GetPluginScriptableObject() {
180 return instance_->GetPluginScriptableObject(); 165 return instance_->GetPluginScriptableObject();
181 } 166 }
182 167
183 NPP WebPluginDelegateImpl::GetPluginNPP() { 168 NPP WebPluginDelegateImpl::GetPluginNPP() {
184 return instance_->npp(); 169 return instance_->npp();
185 } 170 }
186 171
187 bool WebPluginDelegateImpl::GetFormValue(base::string16* value) { 172 bool WebPluginDelegateImpl::GetFormValue(base::string16* value) {
188 return instance_->GetFormValue(value); 173 return instance_->GetFormValue(value);
189 } 174 }
190 175
191 int WebPluginDelegateImpl::GetProcessId() { 176 int WebPluginDelegateImpl::GetProcessId() {
192 // We are in process, so the plugin pid is this current process pid. 177 // We are in process, so the plugin pid is this current process pid.
193 return base::GetCurrentProcId(); 178 return base::GetCurrentProcId();
194 } 179 }
195 180
196 base::FilePath WebPluginDelegateImpl::GetPluginPath() { 181 base::FilePath WebPluginDelegateImpl::GetPluginPath() {
197 return instance()->plugin_lib()->plugin_info().path; 182 return instance()->plugin_lib()->plugin_info().path;
198 } 183 }
199 184
200 void WebPluginDelegateImpl::WindowedUpdateGeometry(
201 const gfx::Rect& window_rect,
202 const gfx::Rect& clip_rect) {
203 if (WindowedReposition(window_rect, clip_rect) ||
204 !windowed_did_set_window_) {
205 // Let the plugin know that it has been moved
206 WindowedSetWindow();
207 }
208 }
209
210 bool WebPluginDelegateImpl::HandleInputEvent( 185 bool WebPluginDelegateImpl::HandleInputEvent(
211 const WebInputEvent& event, 186 const WebInputEvent& event,
212 WebCursor::CursorInfo* cursor_info) { 187 WebCursor::CursorInfo* cursor_info) {
213 DCHECK(windowless_) << "events should only be received in windowless mode";
214
215 bool pop_user_gesture = false; 188 bool pop_user_gesture = false;
216 if (IsUserGesture(event)) { 189 if (IsUserGesture(event)) {
217 pop_user_gesture = true; 190 pop_user_gesture = true;
218 instance()->PushPopupsEnabledState(true); 191 instance()->PushPopupsEnabledState(true);
219 } 192 }
220 193
221 bool handled = PlatformHandleInputEvent(event, cursor_info); 194 bool handled = PlatformHandleInputEvent(event, cursor_info);
222 195
223 if (pop_user_gesture) { 196 if (pop_user_gesture) {
224 instance()->PopPopupsEnabledState(); 197 instance()->PopPopupsEnabledState();
225 } 198 }
226 199
227 return handled; 200 return handled;
228 } 201 }
229 202
230 bool WebPluginDelegateImpl::IsUserGesture(const WebInputEvent& event) { 203 bool WebPluginDelegateImpl::IsUserGesture(const WebInputEvent& event) {
231 switch (event.type) { 204 switch (event.type) {
232 case WebInputEvent::MouseDown: 205 case WebInputEvent::MouseDown:
233 case WebInputEvent::MouseUp: 206 case WebInputEvent::MouseUp:
234 case WebInputEvent::KeyDown: 207 case WebInputEvent::KeyDown:
235 case WebInputEvent::KeyUp: 208 case WebInputEvent::KeyUp:
236 return true; 209 return true;
237 default: 210 default:
238 return false; 211 return false;
239 } 212 }
240 } 213 }
241 214
242 } // namespace content 215 } // namespace content
OLDNEW
« no previous file with comments | « content/child/npapi/webplugin_delegate_impl.h ('k') | content/child/npapi/webplugin_delegate_impl_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698