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

Side by Side Diff: content/renderer/browser_plugin/browser_plugin.cc

Issue 528383003: BrowserPlugin Cleanup: Simplify update device scale factor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/renderer/browser_plugin/browser_plugin.h" 5 #include "content/renderer/browser_plugin/browser_plugin.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 bool BrowserPlugin::GetAllowTransparencyAttribute() const { 142 bool BrowserPlugin::GetAllowTransparencyAttribute() const {
143 return HasDOMAttribute(browser_plugin::kAttributeAllowTransparency); 143 return HasDOMAttribute(browser_plugin::kAttributeAllowTransparency);
144 } 144 }
145 145
146 void BrowserPlugin::ParseAllowTransparencyAttribute() { 146 void BrowserPlugin::ParseAllowTransparencyAttribute() {
147 if (!ready()) 147 if (!ready())
148 return; 148 return;
149 149
150 bool opaque = !GetAllowTransparencyAttribute(); 150 bool opaque = !GetAllowTransparencyAttribute();
151 151
152 if (compositing_helper_.get()) 152 if (compositing_helper_)
lazyboy 2014/09/03 16:58:31 I think this should stay as is, IIUC we are removi
Fady Samuel 2014/09/03 17:30:52 Done.
153 compositing_helper_->SetContentsOpaque(opaque); 153 compositing_helper_->SetContentsOpaque(opaque);
154 154
155 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetContentsOpaque( 155 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetContentsOpaque(
156 render_view_routing_id_, 156 render_view_routing_id_,
157 browser_plugin_instance_id_, 157 browser_plugin_instance_id_,
158 opaque)); 158 opaque));
159 } 159 }
160 160
161 void BrowserPlugin::Attach() { 161 void BrowserPlugin::Attach() {
162 if (ready()) { 162 if (ready()) {
163 attached_ = false; 163 attached_ = false;
164 guest_crashed_ = false; 164 guest_crashed_ = false;
165 EnableCompositing(false); 165 EnableCompositing(false);
166 if (compositing_helper_.get()) { 166 if (compositing_helper_) {
167 compositing_helper_->OnContainerDestroy(); 167 compositing_helper_->OnContainerDestroy();
168 compositing_helper_ = NULL; 168 compositing_helper_ = NULL;
169 } 169 }
170 } 170 }
171 171
172 // TODO(fsamuel): Add support for reattachment. 172 // TODO(fsamuel): Add support for reattachment.
173 BrowserPluginHostMsg_Attach_Params attach_params; 173 BrowserPluginHostMsg_Attach_Params attach_params;
174 attach_params.focused = ShouldGuestBeFocused(); 174 attach_params.focused = ShouldGuestBeFocused();
175 attach_params.visible = visible_; 175 attach_params.visible = visible_;
176 attach_params.opaque = !GetAllowTransparencyAttribute(); 176 attach_params.opaque = !GetAllowTransparencyAttribute();
177 attach_params.origin = plugin_rect().origin(); 177 attach_params.origin = plugin_rect().origin();
178 GetSizeParams(&attach_params.resize_guest_params, false); 178 gfx::Size view_size(width(), height());
179 179 if (!view_size.IsEmpty()) {
180 paint_ack_received_ = false;
181 PopulateResizeGuestParameters(view_size,
182 &attach_params.resize_guest_params);
183 }
180 browser_plugin_manager()->Send(new BrowserPluginHostMsg_Attach( 184 browser_plugin_manager()->Send(new BrowserPluginHostMsg_Attach(
181 render_view_routing_id_, 185 render_view_routing_id_,
182 browser_plugin_instance_id_, 186 browser_plugin_instance_id_,
183 attach_params)); 187 attach_params));
184 188
185 attach_pending_ = true; 189 attach_pending_ = true;
186 } 190 }
187 191
188 void BrowserPlugin::DidCommitCompositorFrame() { 192 void BrowserPlugin::DidCommitCompositorFrame() {
189 if (compositing_helper_.get()) 193 if (compositing_helper_)
190 compositing_helper_->DidCommitCompositorFrame(); 194 compositing_helper_->DidCommitCompositorFrame();
191 } 195 }
192 196
193 void BrowserPlugin::OnAdvanceFocus(int browser_plugin_instance_id, 197 void BrowserPlugin::OnAdvanceFocus(int browser_plugin_instance_id,
194 bool reverse) { 198 bool reverse) {
195 DCHECK(render_view_.get()); 199 DCHECK(render_view_);
196 render_view_->GetWebView()->advanceFocus(reverse); 200 render_view_->GetWebView()->advanceFocus(reverse);
197 } 201 }
198 202
199 void BrowserPlugin::OnAttachACK(int browser_plugin_instance_id) { 203 void BrowserPlugin::OnAttachACK(int browser_plugin_instance_id) {
200 DCHECK(!attached()); 204 DCHECK(!attached());
201 attached_ = true; 205 attached_ = true;
202 attach_pending_ = false; 206 attach_pending_ = false;
203 } 207 }
204 208
205 void BrowserPlugin::OnBuffersSwapped( 209 void BrowserPlugin::OnBuffersSwapped(
(...skipping 20 matching lines...) Expand all
226 param.b.producing_route_id, 230 param.b.producing_route_id,
227 param.b.output_surface_id, 231 param.b.output_surface_id,
228 param.b.producing_host_id, 232 param.b.producing_host_id,
229 param.b.shared_memory_handle); 233 param.b.shared_memory_handle);
230 } 234 }
231 235
232 void BrowserPlugin::OnCopyFromCompositingSurface(int browser_plugin_instance_id, 236 void BrowserPlugin::OnCopyFromCompositingSurface(int browser_plugin_instance_id,
233 int request_id, 237 int request_id,
234 gfx::Rect source_rect, 238 gfx::Rect source_rect,
235 gfx::Size dest_size) { 239 gfx::Size dest_size) {
236 if (!compositing_helper_.get()) { 240 if (!compositing_helper_) {
237 browser_plugin_manager()->Send( 241 browser_plugin_manager()->Send(
238 new BrowserPluginHostMsg_CopyFromCompositingSurfaceAck( 242 new BrowserPluginHostMsg_CopyFromCompositingSurfaceAck(
239 render_view_routing_id_, 243 render_view_routing_id_,
240 browser_plugin_instance_id_, 244 browser_plugin_instance_id_,
241 request_id, 245 request_id,
242 SkBitmap())); 246 SkBitmap()));
243 return; 247 return;
244 } 248 }
245 compositing_helper_->CopyFromCompositingSurface(request_id, source_rect, 249 compositing_helper_->CopyFromCompositingSurface(request_id, source_rect,
246 dest_size); 250 dest_size);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 // resize messages when needed. 314 // resize messages when needed.
311 if (params.is_resize_ack) 315 if (params.is_resize_ack)
312 paint_ack_received_ = true; 316 paint_ack_received_ = true;
313 317
314 if (params.view_size.width() == width() && 318 if (params.view_size.width() == width() &&
315 params.view_size.height() == height()) { 319 params.view_size.height() == height()) {
316 return; 320 return;
317 } 321 }
318 322
319 BrowserPluginHostMsg_ResizeGuest_Params resize_params; 323 BrowserPluginHostMsg_ResizeGuest_Params resize_params;
320 PopulateResizeGuestParameters(&resize_params, plugin_size(), false); 324 PopulateResizeGuestParameters(plugin_size(), &resize_params);
321 paint_ack_received_ = false; 325 paint_ack_received_ = false;
322 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest( 326 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest(
323 render_view_routing_id_, 327 render_view_routing_id_,
324 browser_plugin_instance_id_, 328 browser_plugin_instance_id_,
325 resize_params)); 329 resize_params));
326 } 330 }
327 331
328 NPObject* BrowserPlugin::GetContentWindow() const { 332 NPObject* BrowserPlugin::GetContentWindow() const {
329 if (content_window_routing_id_ == MSG_ROUTING_NONE) 333 if (content_window_routing_id_ == MSG_ROUTING_NONE)
330 return NULL; 334 return NULL;
331 RenderViewImpl* guest_render_view = RenderViewImpl::FromRoutingID( 335 RenderViewImpl* guest_render_view = RenderViewImpl::FromRoutingID(
332 content_window_routing_id_); 336 content_window_routing_id_);
333 if (!guest_render_view) 337 if (!guest_render_view)
334 return NULL; 338 return NULL;
335 blink::WebFrame* guest_frame = guest_render_view->GetWebView()->mainFrame(); 339 blink::WebFrame* guest_frame = guest_render_view->GetWebView()->mainFrame();
336 return guest_frame->windowObject(); 340 return guest_frame->windowObject();
337 } 341 }
338 342
339 void BrowserPlugin::ShowSadGraphic() { 343 void BrowserPlugin::ShowSadGraphic() {
340 // If the BrowserPlugin is scheduled to be deleted, then container_ will be 344 // If the BrowserPlugin is scheduled to be deleted, then container_ will be
341 // NULL so we shouldn't attempt to access it. 345 // NULL so we shouldn't attempt to access it.
342 if (container_) 346 if (container_)
343 container_->invalidate(); 347 container_->invalidate();
344 } 348 }
345 349
346 float BrowserPlugin::GetDeviceScaleFactor() const { 350 float BrowserPlugin::GetDeviceScaleFactor() const {
347 if (!render_view_.get()) 351 if (!render_view_)
348 return 1.0f; 352 return 1.0f;
349 return render_view_->GetWebView()->deviceScaleFactor(); 353 return render_view_->GetWebView()->deviceScaleFactor();
350 } 354 }
351 355
352 void BrowserPlugin::UpdateDeviceScaleFactor(float device_scale_factor) { 356 void BrowserPlugin::UpdateDeviceScaleFactor() {
353 if (last_device_scale_factor_ == device_scale_factor || !paint_ack_received_) 357 if (!paint_ack_received_ ||
358 last_device_scale_factor_ == GetDeviceScaleFactor()) {
354 return; 359 return;
360 }
355 361
356 BrowserPluginHostMsg_ResizeGuest_Params params; 362 BrowserPluginHostMsg_ResizeGuest_Params params;
357 PopulateResizeGuestParameters(&params, plugin_size(), true); 363 PopulateResizeGuestParameters(plugin_size(), &params);
358 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest( 364 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest(
359 render_view_routing_id_, 365 render_view_routing_id_,
360 browser_plugin_instance_id_, 366 browser_plugin_instance_id_,
361 params)); 367 params));
362 } 368 }
363 369
364 void BrowserPlugin::UpdateGuestFocusState() { 370 void BrowserPlugin::UpdateGuestFocusState() {
365 if (!ready()) 371 if (!ready())
366 return; 372 return;
367 bool should_be_focused = ShouldGuestBeFocused(); 373 bool should_be_focused = ShouldGuestBeFocused();
368 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetFocus( 374 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetFocus(
369 render_view_routing_id_, 375 render_view_routing_id_,
370 browser_plugin_instance_id_, 376 browser_plugin_instance_id_,
371 should_be_focused)); 377 should_be_focused));
372 } 378 }
373 379
374 bool BrowserPlugin::ShouldGuestBeFocused() const { 380 bool BrowserPlugin::ShouldGuestBeFocused() const {
375 bool embedder_focused = false; 381 bool embedder_focused = false;
376 if (render_view_.get()) 382 if (render_view_)
377 embedder_focused = render_view_->has_focus(); 383 embedder_focused = render_view_->has_focus();
378 return plugin_focused_ && embedder_focused; 384 return plugin_focused_ && embedder_focused;
379 } 385 }
380 386
381 WebPluginContainer* BrowserPlugin::container() const { 387 WebPluginContainer* BrowserPlugin::container() const {
382 return container_; 388 return container_;
383 } 389 }
384 390
385 bool BrowserPlugin::initialize(WebPluginContainer* container) { 391 bool BrowserPlugin::initialize(WebPluginContainer* container) {
386 if (!container) 392 if (!container)
(...skipping 11 matching lines...) Expand all
398 // available in render tree. 404 // available in render tree.
399 browser_plugin_instance_id_ = browser_plugin_manager()->GetNextInstanceID(); 405 browser_plugin_instance_id_ = browser_plugin_manager()->GetNextInstanceID();
400 UpdateDOMAttribute("internalinstanceid", 406 UpdateDOMAttribute("internalinstanceid",
401 base::IntToString(browser_plugin_instance_id_)); 407 base::IntToString(browser_plugin_instance_id_));
402 408
403 browser_plugin_manager()->AddBrowserPlugin(browser_plugin_instance_id_, this); 409 browser_plugin_manager()->AddBrowserPlugin(browser_plugin_instance_id_, this);
404 return true; 410 return true;
405 } 411 }
406 412
407 void BrowserPlugin::EnableCompositing(bool enable) { 413 void BrowserPlugin::EnableCompositing(bool enable) {
408 bool enabled = !!compositing_helper_.get(); 414 bool enabled = !!compositing_helper_;
409 if (enabled == enable) 415 if (enabled == enable)
410 return; 416 return;
411 417
412 if (enable) { 418 if (enable) {
413 DCHECK(!compositing_helper_.get()); 419 DCHECK(!compositing_helper_);
414 if (!compositing_helper_.get()) { 420 if (!compositing_helper_) {
415 compositing_helper_ = ChildFrameCompositingHelper::CreateForBrowserPlugin( 421 compositing_helper_ = ChildFrameCompositingHelper::CreateForBrowserPlugin(
416 weak_ptr_factory_.GetWeakPtr()); 422 weak_ptr_factory_.GetWeakPtr());
417 } 423 }
418 } 424 }
419 compositing_helper_->EnableCompositing(enable); 425 compositing_helper_->EnableCompositing(enable);
420 compositing_helper_->SetContentsOpaque(!GetAllowTransparencyAttribute()); 426 compositing_helper_->SetContentsOpaque(!GetAllowTransparencyAttribute());
421 427
422 if (!enable) { 428 if (!enable) {
423 DCHECK(compositing_helper_.get()); 429 DCHECK(compositing_helper_);
424 compositing_helper_->OnContainerDestroy(); 430 compositing_helper_->OnContainerDestroy();
425 compositing_helper_ = NULL; 431 compositing_helper_ = NULL;
426 } 432 }
427 } 433 }
428 434
429 void BrowserPlugin::destroy() { 435 void BrowserPlugin::destroy() {
430 // If the plugin was initialized then it has a valid |npp_| identifier, and 436 // If the plugin was initialized then it has a valid |npp_| identifier, and
431 // the |container_| must clear references to the plugin's script objects. 437 // the |container_| must clear references to the plugin's script objects.
432 DCHECK(!npp_ || container_); 438 DCHECK(!npp_ || container_);
433 if (container_) 439 if (container_)
434 container_->clearScriptObjects(); 440 container_->clearScriptObjects();
435 441
436 if (compositing_helper_.get()) 442 if (compositing_helper_)
437 compositing_helper_->OnContainerDestroy(); 443 compositing_helper_->OnContainerDestroy();
438 container_ = NULL; 444 container_ = NULL;
439 // Will be a no-op if the mouse is not currently locked. 445 // Will be a no-op if the mouse is not currently locked.
440 if (render_view_.get()) 446 if (render_view_)
441 render_view_->mouse_lock_dispatcher()->OnLockTargetDestroyed(this); 447 render_view_->mouse_lock_dispatcher()->OnLockTargetDestroyed(this);
442 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); 448 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
443 } 449 }
444 450
445 NPObject* BrowserPlugin::scriptableObject() { 451 NPObject* BrowserPlugin::scriptableObject() {
446 if (!bindings_) 452 if (!bindings_)
447 return NULL; 453 return NULL;
448 454
449 NPObject* browser_plugin_np_object(bindings_->np_object()); 455 NPObject* browser_plugin_np_object(bindings_->np_object());
450 // The object is expected to be retained before it is returned. 456 // The object is expected to be retained before it is returned.
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 // resize. 547 // resize.
542 if (!paint_ack_received_ || 548 if (!paint_ack_received_ ||
543 (old_width == window_rect.width && old_height == window_rect.height)) { 549 (old_width == window_rect.width && old_height == window_rect.height)) {
544 // Let the browser know about the updated view rect. 550 // Let the browser know about the updated view rect.
545 browser_plugin_manager()->Send(new BrowserPluginHostMsg_UpdateGeometry( 551 browser_plugin_manager()->Send(new BrowserPluginHostMsg_UpdateGeometry(
546 render_view_routing_id_, browser_plugin_instance_id_, plugin_rect_)); 552 render_view_routing_id_, browser_plugin_instance_id_, plugin_rect_));
547 return; 553 return;
548 } 554 }
549 555
550 BrowserPluginHostMsg_ResizeGuest_Params params; 556 BrowserPluginHostMsg_ResizeGuest_Params params;
551 PopulateResizeGuestParameters(&params, plugin_size(), false); 557 PopulateResizeGuestParameters(plugin_size(), &params);
552 paint_ack_received_ = false; 558 paint_ack_received_ = false;
553 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest( 559 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest(
554 render_view_routing_id_, 560 render_view_routing_id_,
555 browser_plugin_instance_id_, 561 browser_plugin_instance_id_,
556 params)); 562 params));
557 } 563 }
558 564
559 void BrowserPlugin::PopulateResizeGuestParameters( 565 void BrowserPlugin::PopulateResizeGuestParameters(
560 BrowserPluginHostMsg_ResizeGuest_Params* params,
561 const gfx::Size& view_size, 566 const gfx::Size& view_size,
562 bool needs_repaint) { 567 BrowserPluginHostMsg_ResizeGuest_Params* params) {
563 params->size_changed = true; 568 params->size_changed = true;
564 params->view_size = view_size; 569 params->view_size = view_size;
565 params->repaint = needs_repaint;
566 params->scale_factor = GetDeviceScaleFactor(); 570 params->scale_factor = GetDeviceScaleFactor();
567 if (last_device_scale_factor_ != params->scale_factor) { 571 if (last_device_scale_factor_ != params->scale_factor) {
568 DCHECK(params->repaint);
569 last_device_scale_factor_ = params->scale_factor; 572 last_device_scale_factor_ = params->scale_factor;
573 params->repaint = true;
570 } 574 }
571 } 575 }
572 576
573 void BrowserPlugin::GetSizeParams(
574 BrowserPluginHostMsg_ResizeGuest_Params* resize_guest_params,
575 bool needs_repaint) {
576 gfx::Size view_size(width(), height());
577 if (view_size.IsEmpty())
578 return;
579 paint_ack_received_ = false;
580 PopulateResizeGuestParameters(resize_guest_params, view_size, needs_repaint);
581 }
582
583 void BrowserPlugin::updateFocus(bool focused) { 577 void BrowserPlugin::updateFocus(bool focused) {
584 plugin_focused_ = focused; 578 plugin_focused_ = focused;
585 UpdateGuestFocusState(); 579 UpdateGuestFocusState();
586 } 580 }
587 581
588 void BrowserPlugin::updateVisibility(bool visible) { 582 void BrowserPlugin::updateVisibility(bool visible) {
589 if (visible_ == visible) 583 if (visible_ == visible)
590 return; 584 return;
591 585
592 visible_ = visible; 586 visible_ = visible;
593 if (!ready()) 587 if (!ready())
594 return; 588 return;
595 589
596 if (compositing_helper_.get()) 590 if (compositing_helper_)
597 compositing_helper_->UpdateVisibility(visible); 591 compositing_helper_->UpdateVisibility(visible);
598 592
599 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetVisibility( 593 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetVisibility(
600 render_view_routing_id_, 594 render_view_routing_id_,
601 browser_plugin_instance_id_, 595 browser_plugin_instance_id_,
602 visible)); 596 visible));
603 } 597 }
604 598
605 bool BrowserPlugin::acceptsInputEvents() { 599 bool BrowserPlugin::acceptsInputEvents() {
606 return true; 600 return true;
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 const blink::WebMouseEvent& event) { 803 const blink::WebMouseEvent& event) {
810 browser_plugin_manager()->Send( 804 browser_plugin_manager()->Send(
811 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_, 805 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_,
812 browser_plugin_instance_id_, 806 browser_plugin_instance_id_,
813 plugin_rect_, 807 plugin_rect_,
814 &event)); 808 &event));
815 return true; 809 return true;
816 } 810 }
817 811
818 } // namespace content 812 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698