OLD | NEW |
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 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 #import <QuartzCore/QuartzCore.h> | 8 #import <QuartzCore/QuartzCore.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <string.h> | 10 #include <string.h> |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 WebInputEvent::RightButtonDown | | 142 WebInputEvent::RightButtonDown | |
143 WebInputEvent::MiddleButtonDown; | 143 WebInputEvent::MiddleButtonDown; |
144 } | 144 } |
145 | 145 |
146 #pragma mark - | 146 #pragma mark - |
147 #pragma mark Core WebPluginDelegate implementation | 147 #pragma mark Core WebPluginDelegate implementation |
148 | 148 |
149 WebPluginDelegateImpl::WebPluginDelegateImpl( | 149 WebPluginDelegateImpl::WebPluginDelegateImpl( |
150 WebPlugin* plugin, | 150 WebPlugin* plugin, |
151 PluginInstance* instance) | 151 PluginInstance* instance) |
152 : windowed_handle_(gfx::kNullPluginWindow), | 152 : plugin_(plugin), |
153 // all Mac plugins are "windowless" in the Windows/X11 sense | |
154 windowless_(true), | |
155 plugin_(plugin), | |
156 instance_(instance), | 153 instance_(instance), |
157 quirks_(0), | 154 quirks_(0), |
158 use_buffer_context_(true), | 155 use_buffer_context_(true), |
159 buffer_context_(NULL), | 156 buffer_context_(NULL), |
160 layer_(nil), | 157 layer_(nil), |
161 surface_(NULL), | 158 surface_(NULL), |
162 renderer_(nil), | 159 renderer_(nil), |
163 containing_window_has_focus_(false), | 160 containing_window_has_focus_(false), |
164 initial_window_focus_(false), | 161 initial_window_focus_(false), |
165 container_is_visible_(false), | 162 container_is_visible_(false), |
166 have_called_set_window_(false), | 163 have_called_set_window_(false), |
167 ime_enabled_(false), | 164 ime_enabled_(false), |
168 keyup_ignore_count_(0), | 165 keyup_ignore_count_(0), |
169 external_drag_tracker_(new ExternalDragTracker()), | 166 external_drag_tracker_(new ExternalDragTracker()), |
170 handle_event_depth_(0), | 167 handle_event_depth_(0), |
171 first_set_window_call_(true), | 168 first_set_window_call_(true), |
172 plugin_has_focus_(false), | 169 plugin_has_focus_(false), |
173 has_webkit_focus_(false), | 170 has_webkit_focus_(false), |
174 containing_view_has_focus_(true), | 171 containing_view_has_focus_(true), |
175 creation_succeeded_(false) { | 172 creation_succeeded_(false) { |
176 memset(&window_, 0, sizeof(window_)); | 173 memset(&window_, 0, sizeof(window_)); |
177 instance->set_windowless(true); | |
178 } | 174 } |
179 | 175 |
180 WebPluginDelegateImpl::~WebPluginDelegateImpl() { | 176 WebPluginDelegateImpl::~WebPluginDelegateImpl() { |
181 DestroyInstance(); | 177 DestroyInstance(); |
182 } | 178 } |
183 | 179 |
184 bool WebPluginDelegateImpl::PlatformInitialize() { | 180 bool WebPluginDelegateImpl::PlatformInitialize() { |
185 // Don't set a NULL window handle on destroy for Mac plugins. This matches | 181 // Don't set a NULL window handle on destroy for Mac plugins. This matches |
186 // Safari and other Mac browsers (see PluginView::stop() in PluginView.cpp, | 182 // Safari and other Mac browsers (see PluginView::stop() in PluginView.cpp, |
187 // where code to do so is surrounded by an #ifdef that excludes Mac OS X, or | 183 // where code to do so is surrounded by an #ifdef that excludes Mac OS X, or |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 plugin_->AcceleratedPluginEnabledRendering(); | 241 plugin_->AcceleratedPluginEnabledRendering(); |
246 } | 242 } |
247 } | 243 } |
248 break; | 244 break; |
249 } | 245 } |
250 default: | 246 default: |
251 NOTREACHED(); | 247 NOTREACHED(); |
252 break; | 248 break; |
253 } | 249 } |
254 | 250 |
255 // Let the WebPlugin know that we are windowless, unless this is a Core | |
256 // Animation plugin, in which case AcceleratedPluginEnabledRendering | |
257 // calls SetWindow. Rendering breaks if SetWindow is called before | |
258 // accelerated rendering is enabled. | |
259 if (!layer_) | |
260 plugin_->SetWindow(gfx::kNullPluginWindow); | |
261 | |
262 return true; | 251 return true; |
263 } | 252 } |
264 | 253 |
265 void WebPluginDelegateImpl::PlatformDestroyInstance() { | 254 void WebPluginDelegateImpl::PlatformDestroyInstance() { |
266 if (redraw_timer_) | 255 if (redraw_timer_) |
267 redraw_timer_->Stop(); | 256 redraw_timer_->Stop(); |
268 [renderer_ release]; | 257 [renderer_ release]; |
269 renderer_ = nil; | 258 renderer_ = nil; |
270 layer_ = nil; | 259 layer_ = nil; |
271 } | 260 } |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 if (!have_called_set_window_) { | 490 if (!have_called_set_window_) { |
502 have_called_set_window_ = true; | 491 have_called_set_window_ = true; |
503 SetWindowHasFocus(initial_window_focus_); | 492 SetWindowHasFocus(initial_window_focus_); |
504 } | 493 } |
505 | 494 |
506 DCHECK(err == NPERR_NO_ERROR); | 495 DCHECK(err == NPERR_NO_ERROR); |
507 } | 496 } |
508 | 497 |
509 #pragma mark - | 498 #pragma mark - |
510 | 499 |
511 bool WebPluginDelegateImpl::WindowedCreatePlugin() { | |
512 NOTREACHED(); | |
513 return false; | |
514 } | |
515 | |
516 void WebPluginDelegateImpl::WindowedDestroyWindow() { | |
517 NOTREACHED(); | |
518 } | |
519 | |
520 bool WebPluginDelegateImpl::WindowedReposition(const gfx::Rect& window_rect, | |
521 const gfx::Rect& clip_rect) { | |
522 NOTREACHED(); | |
523 return false; | |
524 } | |
525 | |
526 void WebPluginDelegateImpl::WindowedSetWindow() { | |
527 NOTREACHED(); | |
528 } | |
529 | |
530 #pragma mark - | 500 #pragma mark - |
531 #pragma mark Mac Extensions | 501 #pragma mark Mac Extensions |
532 | 502 |
533 void WebPluginDelegateImpl::PluginDidInvalidate() { | 503 void WebPluginDelegateImpl::PluginDidInvalidate() { |
534 if (instance()->drawing_model() == NPDrawingModelInvalidatingCoreAnimation) | 504 if (instance()->drawing_model() == NPDrawingModelInvalidatingCoreAnimation) |
535 DrawLayerInSurface(); | 505 DrawLayerInSurface(); |
536 } | 506 } |
537 | 507 |
538 WebPluginDelegateImpl* WebPluginDelegateImpl::GetActiveDelegate() { | 508 WebPluginDelegateImpl* WebPluginDelegateImpl::GetActiveDelegate() { |
539 return g_active_delegate; | 509 return g_active_delegate; |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
717 window_rect_.width(), window_rect_.height())]; | 687 window_rect_.width(), window_rect_.height())]; |
718 [CATransaction commit]; | 688 [CATransaction commit]; |
719 | 689 |
720 [renderer_ setBounds:[layer_ bounds]]; | 690 [renderer_ setBounds:[layer_ bounds]]; |
721 surface_->SetSize(window_rect_.size()); | 691 surface_->SetSize(window_rect_.size()); |
722 // Kick off the drawing timer, if necessary. | 692 // Kick off the drawing timer, if necessary. |
723 PluginVisibilityChanged(); | 693 PluginVisibilityChanged(); |
724 } | 694 } |
725 | 695 |
726 } // namespace content | 696 } // namespace content |
OLD | NEW |