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

Side by Side Diff: extensions/browser/guest_view/guest_view_base.cc

Issue 856563002: Added the infrastructure for surfaceProxy.onResize() and SurfaceView.onResize() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments. Added a bit more infrastructure than in the previous patch. Created 5 years, 11 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 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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698