Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/guest_view/guest_view_base.h" | 5 #include "extensions/browser/guest_view/guest_view_base.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "components/ui/zoom/zoom_controller.h" | 9 #include "components/ui/zoom/zoom_controller.h" |
| 10 #include "content/public/browser/navigation_details.h" | 10 #include "content/public/browser/navigation_details.h" |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 218 create_params.GetInteger(guestview::kParameterInstanceId, | 218 create_params.GetInteger(guestview::kParameterInstanceId, |
| 219 &view_instance_id_); | 219 &view_instance_id_); |
| 220 | 220 |
| 221 if (CanRunInDetachedState()) | 221 if (CanRunInDetachedState()) |
| 222 SetUpAutoSize(create_params); | 222 SetUpAutoSize(create_params); |
| 223 | 223 |
| 224 // Give the derived class an opportunity to perform additional initialization. | 224 // Give the derived class an opportunity to perform additional initialization. |
| 225 DidInitialize(create_params); | 225 DidInitialize(create_params); |
| 226 } | 226 } |
| 227 | 227 |
| 228 void GuestViewBase::DispatchOnResizeEvent(const gfx::Size& old_size, | |
| 229 const gfx::Size& new_size) { | |
| 230 if (new_size == old_size) | |
| 231 return; | |
| 232 | |
| 233 // Dispatch the onResize event. | |
| 234 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | |
| 235 args->SetInteger(guestview::kOldWidth, old_size.width()); | |
| 236 args->SetInteger(guestview::kOldHeight, old_size.height()); | |
| 237 args->SetInteger(guestview::kNewWidth, new_size.width()); | |
| 238 args->SetInteger(guestview::kNewHeight, new_size.height()); | |
| 239 DispatchEventToGuestProxy( | |
| 240 new GuestViewBase::Event(guestview::kEventResize, args.Pass())); | |
|
Fady Samuel
2015/01/19 23:57:01
Is GuestViewBase:: necessary?
paulmeyer
2015/01/20 00:24:38
Done.
| |
| 241 } | |
| 242 | |
| 228 void GuestViewBase::SetAutoSize(bool enabled, | 243 void GuestViewBase::SetAutoSize(bool enabled, |
| 229 const gfx::Size& min_size, | 244 const gfx::Size& min_size, |
| 230 const gfx::Size& max_size) { | 245 const gfx::Size& max_size) { |
| 231 min_auto_size_ = min_size; | 246 min_auto_size_ = min_size; |
| 232 min_auto_size_.SetToMin(max_size); | 247 min_auto_size_.SetToMin(max_size); |
| 233 max_auto_size_ = max_size; | 248 max_auto_size_ = max_size; |
| 234 max_auto_size_.SetToMax(min_size); | 249 max_auto_size_.SetToMax(min_size); |
| 235 | 250 |
| 236 enabled &= !min_auto_size_.IsEmpty() && !max_auto_size_.IsEmpty() && | 251 enabled &= !min_auto_size_.IsEmpty() && !max_auto_size_.IsEmpty() && |
| 237 IsAutoSizeSupported(); | 252 IsAutoSizeSupported(); |
| 238 if (!enabled && !auto_size_enabled_) | 253 if (!enabled && !auto_size_enabled_) |
| 239 return; | 254 return; |
| 240 | 255 |
| 241 auto_size_enabled_ = enabled; | 256 auto_size_enabled_ = enabled; |
| 242 | 257 |
| 243 if (!attached() && !CanRunInDetachedState()) | 258 if (!attached() && !CanRunInDetachedState()) |
| 244 return; | 259 return; |
| 245 | 260 |
| 246 content::RenderViewHost* rvh = web_contents()->GetRenderViewHost(); | 261 content::RenderViewHost* rvh = web_contents()->GetRenderViewHost(); |
| 247 if (auto_size_enabled_) { | 262 if (auto_size_enabled_) { |
| 248 rvh->EnableAutoResize(min_auto_size_, max_auto_size_); | 263 rvh->EnableAutoResize(min_auto_size_, max_auto_size_); |
| 249 } else { | 264 } else { |
| 250 rvh->DisableAutoResize(element_size_); | 265 rvh->DisableAutoResize(element_size_); |
| 266 DispatchOnResizeEvent(guest_size_, element_size_); | |
| 267 GuestSizeChangedDueToAutoSize(guest_size_, element_size_); | |
| 251 guest_size_ = element_size_; | 268 guest_size_ = element_size_; |
| 252 GuestSizeChangedDueToAutoSize(guest_size_, element_size_); | |
| 253 } | 269 } |
| 254 } | 270 } |
| 255 | 271 |
| 256 // static | 272 // static |
| 257 void GuestViewBase::RegisterGuestViewType( | 273 void GuestViewBase::RegisterGuestViewType( |
| 258 const std::string& view_type, | 274 const std::string& view_type, |
| 259 const GuestCreationCallback& callback) { | 275 const GuestCreationCallback& callback) { |
| 260 GuestViewCreationMap::iterator it = | 276 GuestViewCreationMap::iterator it = |
| 261 guest_view_registry.Get().find(view_type); | 277 guest_view_registry.Get().find(view_type); |
| 262 DCHECK(it == guest_view_registry.Get().end()); | 278 DCHECK(it == guest_view_registry.Get().end()); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 358 StopTrackingEmbedderZoomLevel(); | 374 StopTrackingEmbedderZoomLevel(); |
| 359 owner_web_contents()->Send(new ExtensionMsg_GuestDetached( | 375 owner_web_contents()->Send(new ExtensionMsg_GuestDetached( |
| 360 element_instance_id_)); | 376 element_instance_id_)); |
| 361 element_instance_id_ = guestview::kInstanceIDNone; | 377 element_instance_id_ = guestview::kInstanceIDNone; |
| 362 } | 378 } |
| 363 | 379 |
| 364 void GuestViewBase::ElementSizeChanged(const gfx::Size& size) { | 380 void GuestViewBase::ElementSizeChanged(const gfx::Size& size) { |
| 365 element_size_ = size; | 381 element_size_ = size; |
| 366 | 382 |
| 367 // Only resize if needed. | 383 // Only resize if needed. |
| 368 if (!size.IsEmpty()) | 384 if (!size.IsEmpty()) { |
| 369 guest_sizer_->SizeContents(size); | 385 guest_sizer_->SizeContents(size); |
| 386 DispatchOnResizeEvent(guest_size_, size); | |
|
Fady Samuel
2015/01/19 23:57:01
Can we avoid an extra call to this? Doesn't GuestS
paulmeyer
2015/01/20 00:24:38
Done.
| |
| 387 guest_size_ = size; | |
| 388 } | |
| 370 } | 389 } |
| 371 | 390 |
| 372 WebContents* GuestViewBase::GetOwnerWebContents() const { | 391 WebContents* GuestViewBase::GetOwnerWebContents() const { |
| 373 return owner_web_contents_; | 392 return owner_web_contents_; |
| 374 } | 393 } |
| 375 | 394 |
| 376 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size, | 395 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size, |
| 377 const gfx::Size& new_size) { | 396 const gfx::Size& new_size) { |
| 378 if (!auto_size_enabled_) | 397 if (!auto_size_enabled_) |
| 379 return; | 398 return; |
| 380 guest_size_ = new_size; | 399 guest_size_ = new_size; |
| 400 DispatchOnResizeEvent(old_size, new_size); | |
| 381 GuestSizeChangedDueToAutoSize(old_size, new_size); | 401 GuestSizeChangedDueToAutoSize(old_size, new_size); |
| 382 } | 402 } |
| 383 | 403 |
| 384 const GURL& GuestViewBase::GetOwnerSiteURL() const { | 404 const GURL& GuestViewBase::GetOwnerSiteURL() const { |
| 385 return owner_web_contents()->GetLastCommittedURL(); | 405 return owner_web_contents()->GetLastCommittedURL(); |
| 386 } | 406 } |
| 387 | 407 |
| 388 void GuestViewBase::Destroy() { | 408 void GuestViewBase::Destroy() { |
| 389 if (is_being_destroyed_) | 409 if (is_being_destroyed_) |
| 390 return; | 410 return; |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 551 void GuestViewBase::OnZoomChanged( | 571 void GuestViewBase::OnZoomChanged( |
| 552 const ui_zoom::ZoomController::ZoomChangedEventData& data) { | 572 const ui_zoom::ZoomController::ZoomChangedEventData& data) { |
| 553 if (content::ZoomValuesEqual(data.old_zoom_level, data.new_zoom_level)) | 573 if (content::ZoomValuesEqual(data.old_zoom_level, data.new_zoom_level)) |
| 554 return; | 574 return; |
| 555 // When the embedder's zoom level is changed, then we also update the | 575 // When the embedder's zoom level is changed, then we also update the |
| 556 // guest's zoom level to match. | 576 // guest's zoom level to match. |
| 557 ui_zoom::ZoomController::FromWebContents(web_contents()) | 577 ui_zoom::ZoomController::FromWebContents(web_contents()) |
| 558 ->SetZoomLevel(data.new_zoom_level); | 578 ->SetZoomLevel(data.new_zoom_level); |
| 559 } | 579 } |
| 560 | 580 |
| 561 void GuestViewBase::DispatchEventToEmbedder(Event* event) { | 581 void GuestViewBase::DispatchEventToGuestProxy(Event* event) { |
| 562 scoped_ptr<Event> event_ptr(event); | 582 DispatchEvent(event, guest_instance_id_); |
| 583 } | |
| 563 | 584 |
| 585 void GuestViewBase::DispatchEventToView(Event* event) { | |
| 564 if (!attached() && | 586 if (!attached() && |
| 565 (!CanRunInDetachedState() || !can_owner_receive_events())) { | 587 (!CanRunInDetachedState() || !can_owner_receive_events())) { |
| 566 pending_events_.push_back(linked_ptr<Event>(event_ptr.release())); | 588 pending_events_.push_back(linked_ptr<Event>(event)); |
| 567 return; | 589 return; |
| 568 } | 590 } |
| 569 | 591 |
| 592 DispatchEvent(event, view_instance_id_); | |
| 593 } | |
| 594 | |
| 595 void GuestViewBase::DispatchEvent(Event* event, int instance_id) { | |
| 596 scoped_ptr<Event> event_ptr(event); | |
| 597 | |
| 570 EventFilteringInfo info; | 598 EventFilteringInfo info; |
| 571 info.SetInstanceID(view_instance_id_); | 599 info.SetInstanceID(instance_id); |
| 600 | |
|
Fady Samuel
2015/01/19 23:57:01
Is there whitespace here?
paulmeyer
2015/01/20 00:24:38
Yes. Taken out.
| |
| 572 scoped_ptr<base::ListValue> args(new base::ListValue()); | 601 scoped_ptr<base::ListValue> args(new base::ListValue()); |
| 573 args->Append(event->GetArguments().release()); | 602 args->Append(event->GetArguments().release()); |
| 574 | 603 |
| 575 EventRouter::DispatchEvent( | 604 EventRouter::DispatchEvent( |
| 576 owner_web_contents_, | 605 owner_web_contents_, |
| 577 browser_context_, | 606 browser_context_, |
| 578 owner_extension_id_, | 607 owner_extension_id_, |
| 579 event->name(), | 608 event->name(), |
| 580 args.Pass(), | 609 args.Pass(), |
| 581 EventRouter::USER_GESTURE_UNKNOWN, | 610 EventRouter::USER_GESTURE_UNKNOWN, |
| 582 info); | 611 info); |
| 583 } | 612 } |
| 584 | 613 |
| 585 void GuestViewBase::SendQueuedEvents() { | 614 void GuestViewBase::SendQueuedEvents() { |
| 586 if (!attached()) | 615 if (!attached()) |
| 587 return; | 616 return; |
| 588 while (!pending_events_.empty()) { | 617 while (!pending_events_.empty()) { |
| 589 linked_ptr<Event> event_ptr = pending_events_.front(); | 618 linked_ptr<Event> event_ptr = pending_events_.front(); |
| 590 pending_events_.pop_front(); | 619 pending_events_.pop_front(); |
| 591 DispatchEventToEmbedder(event_ptr.release()); | 620 DispatchEvent(event_ptr.release(), view_instance_id_); |
| 592 } | 621 } |
| 593 } | 622 } |
| 594 | 623 |
| 595 void GuestViewBase::CompleteInit( | 624 void GuestViewBase::CompleteInit( |
| 596 scoped_ptr<base::DictionaryValue> create_params, | 625 scoped_ptr<base::DictionaryValue> create_params, |
| 597 const WebContentsCreatedCallback& callback, | 626 const WebContentsCreatedCallback& callback, |
| 598 content::WebContents* guest_web_contents) { | 627 content::WebContents* guest_web_contents) { |
| 599 if (!guest_web_contents) { | 628 if (!guest_web_contents) { |
| 600 // The derived class did not create a WebContents so this class serves no | 629 // The derived class did not create a WebContents so this class serves no |
| 601 // purpose. Let's self-destruct. | 630 // purpose. Let's self-destruct. |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 659 // static | 688 // static |
| 660 void GuestViewBase::RegisterGuestViewTypes() { | 689 void GuestViewBase::RegisterGuestViewTypes() { |
| 661 AppViewGuest::Register(); | 690 AppViewGuest::Register(); |
| 662 ExtensionOptionsGuest::Register(); | 691 ExtensionOptionsGuest::Register(); |
| 663 MimeHandlerViewGuest::Register(); | 692 MimeHandlerViewGuest::Register(); |
| 664 SurfaceWorkerGuest::Register(); | 693 SurfaceWorkerGuest::Register(); |
| 665 WebViewGuest::Register(); | 694 WebViewGuest::Register(); |
| 666 } | 695 } |
| 667 | 696 |
| 668 } // namespace extensions | 697 } // namespace extensions |
| OLD | NEW |