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

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. 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(new Event(guestview::kEventResize, args.Pass()));
240 }
241
228 void GuestViewBase::SetAutoSize(bool enabled, 242 void GuestViewBase::SetAutoSize(bool enabled,
229 const gfx::Size& min_size, 243 const gfx::Size& min_size,
230 const gfx::Size& max_size) { 244 const gfx::Size& max_size) {
231 min_auto_size_ = min_size; 245 min_auto_size_ = min_size;
232 min_auto_size_.SetToMin(max_size); 246 min_auto_size_.SetToMin(max_size);
233 max_auto_size_ = max_size; 247 max_auto_size_ = max_size;
234 max_auto_size_.SetToMax(min_size); 248 max_auto_size_.SetToMax(min_size);
235 249
236 enabled &= !min_auto_size_.IsEmpty() && !max_auto_size_.IsEmpty() && 250 enabled &= !min_auto_size_.IsEmpty() && !max_auto_size_.IsEmpty() &&
237 IsAutoSizeSupported(); 251 IsAutoSizeSupported();
238 if (!enabled && !auto_size_enabled_) 252 if (!enabled && !auto_size_enabled_)
239 return; 253 return;
240 254
241 auto_size_enabled_ = enabled; 255 auto_size_enabled_ = enabled;
242 256
243 if (!attached() && !CanRunInDetachedState()) 257 if (!attached() && !CanRunInDetachedState())
244 return; 258 return;
245 259
246 content::RenderViewHost* rvh = web_contents()->GetRenderViewHost(); 260 content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
247 if (auto_size_enabled_) { 261 if (auto_size_enabled_) {
248 rvh->EnableAutoResize(min_auto_size_, max_auto_size_); 262 rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
249 } else { 263 } else {
250 rvh->DisableAutoResize(element_size_); 264 rvh->DisableAutoResize(element_size_);
265 DispatchOnResizeEvent(guest_size_, element_size_);
266 GuestSizeChangedDueToAutoSize(guest_size_, element_size_);
251 guest_size_ = element_size_; 267 guest_size_ = element_size_;
252 GuestSizeChangedDueToAutoSize(guest_size_, element_size_);
253 } 268 }
254 } 269 }
255 270
256 // static 271 // static
257 void GuestViewBase::RegisterGuestViewType( 272 void GuestViewBase::RegisterGuestViewType(
258 const std::string& view_type, 273 const std::string& view_type,
259 const GuestCreationCallback& callback) { 274 const GuestCreationCallback& callback) {
260 GuestViewCreationMap::iterator it = 275 GuestViewCreationMap::iterator it =
261 guest_view_registry.Get().find(view_type); 276 guest_view_registry.Get().find(view_type);
262 DCHECK(it == guest_view_registry.Get().end()); 277 DCHECK(it == guest_view_registry.Get().end());
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 StopTrackingEmbedderZoomLevel(); 373 StopTrackingEmbedderZoomLevel();
359 owner_web_contents()->Send(new ExtensionMsg_GuestDetached( 374 owner_web_contents()->Send(new ExtensionMsg_GuestDetached(
360 element_instance_id_)); 375 element_instance_id_));
361 element_instance_id_ = guestview::kInstanceIDNone; 376 element_instance_id_ = guestview::kInstanceIDNone;
362 } 377 }
363 378
364 void GuestViewBase::ElementSizeChanged(const gfx::Size& size) { 379 void GuestViewBase::ElementSizeChanged(const gfx::Size& size) {
365 element_size_ = size; 380 element_size_ = size;
366 381
367 // Only resize if needed. 382 // Only resize if needed.
368 if (!size.IsEmpty()) 383 if (!size.IsEmpty()) {
369 guest_sizer_->SizeContents(size); 384 guest_sizer_->SizeContents(size);
385 guest_size_ = size;
386 }
370 } 387 }
371 388
372 WebContents* GuestViewBase::GetOwnerWebContents() const { 389 WebContents* GuestViewBase::GetOwnerWebContents() const {
373 return owner_web_contents_; 390 return owner_web_contents_;
374 } 391 }
375 392
376 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size, 393 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size,
377 const gfx::Size& new_size) { 394 const gfx::Size& new_size) {
395 DispatchOnResizeEvent(old_size, new_size);
378 if (!auto_size_enabled_) 396 if (!auto_size_enabled_)
379 return; 397 return;
380 guest_size_ = new_size; 398 guest_size_ = new_size;
381 GuestSizeChangedDueToAutoSize(old_size, new_size); 399 GuestSizeChangedDueToAutoSize(old_size, new_size);
382 } 400 }
383 401
384 const GURL& GuestViewBase::GetOwnerSiteURL() const { 402 const GURL& GuestViewBase::GetOwnerSiteURL() const {
385 return owner_web_contents()->GetLastCommittedURL(); 403 return owner_web_contents()->GetLastCommittedURL();
386 } 404 }
387 405
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 void GuestViewBase::OnZoomChanged( 569 void GuestViewBase::OnZoomChanged(
552 const ui_zoom::ZoomController::ZoomChangedEventData& data) { 570 const ui_zoom::ZoomController::ZoomChangedEventData& data) {
553 if (content::ZoomValuesEqual(data.old_zoom_level, data.new_zoom_level)) 571 if (content::ZoomValuesEqual(data.old_zoom_level, data.new_zoom_level))
554 return; 572 return;
555 // When the embedder's zoom level is changed, then we also update the 573 // When the embedder's zoom level is changed, then we also update the
556 // guest's zoom level to match. 574 // guest's zoom level to match.
557 ui_zoom::ZoomController::FromWebContents(web_contents()) 575 ui_zoom::ZoomController::FromWebContents(web_contents())
558 ->SetZoomLevel(data.new_zoom_level); 576 ->SetZoomLevel(data.new_zoom_level);
559 } 577 }
560 578
561 void GuestViewBase::DispatchEventToEmbedder(Event* event) { 579 void GuestViewBase::DispatchEventToGuestProxy(Event* event) {
562 scoped_ptr<Event> event_ptr(event); 580 DispatchEvent(event, guest_instance_id_);
581 }
563 582
583 void GuestViewBase::DispatchEventToView(Event* event) {
564 if (!attached() && 584 if (!attached() &&
565 (!CanRunInDetachedState() || !can_owner_receive_events())) { 585 (!CanRunInDetachedState() || !can_owner_receive_events())) {
566 pending_events_.push_back(linked_ptr<Event>(event_ptr.release())); 586 pending_events_.push_back(linked_ptr<Event>(event));
567 return; 587 return;
568 } 588 }
569 589
590 DispatchEvent(event, view_instance_id_);
591 }
592
593 void GuestViewBase::DispatchEvent(Event* event, int instance_id) {
594 scoped_ptr<Event> event_ptr(event);
595
570 EventFilteringInfo info; 596 EventFilteringInfo info;
571 info.SetInstanceID(view_instance_id_); 597 info.SetInstanceID(instance_id);
572 scoped_ptr<base::ListValue> args(new base::ListValue()); 598 scoped_ptr<base::ListValue> args(new base::ListValue());
573 args->Append(event->GetArguments().release()); 599 args->Append(event->GetArguments().release());
574 600
575 EventRouter::DispatchEvent( 601 EventRouter::DispatchEvent(
576 owner_web_contents_, 602 owner_web_contents_,
577 browser_context_, 603 browser_context_,
578 owner_extension_id_, 604 owner_extension_id_,
579 event->name(), 605 event->name(),
580 args.Pass(), 606 args.Pass(),
581 EventRouter::USER_GESTURE_UNKNOWN, 607 EventRouter::USER_GESTURE_UNKNOWN,
582 info); 608 info);
583 } 609 }
584 610
585 void GuestViewBase::SendQueuedEvents() { 611 void GuestViewBase::SendQueuedEvents() {
586 if (!attached()) 612 if (!attached())
587 return; 613 return;
588 while (!pending_events_.empty()) { 614 while (!pending_events_.empty()) {
589 linked_ptr<Event> event_ptr = pending_events_.front(); 615 linked_ptr<Event> event_ptr = pending_events_.front();
590 pending_events_.pop_front(); 616 pending_events_.pop_front();
591 DispatchEventToEmbedder(event_ptr.release()); 617 DispatchEvent(event_ptr.release(), view_instance_id_);
592 } 618 }
593 } 619 }
594 620
595 void GuestViewBase::CompleteInit( 621 void GuestViewBase::CompleteInit(
596 scoped_ptr<base::DictionaryValue> create_params, 622 scoped_ptr<base::DictionaryValue> create_params,
597 const WebContentsCreatedCallback& callback, 623 const WebContentsCreatedCallback& callback,
598 content::WebContents* guest_web_contents) { 624 content::WebContents* guest_web_contents) {
599 if (!guest_web_contents) { 625 if (!guest_web_contents) {
600 // The derived class did not create a WebContents so this class serves no 626 // The derived class did not create a WebContents so this class serves no
601 // purpose. Let's self-destruct. 627 // purpose. Let's self-destruct.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 // static 685 // static
660 void GuestViewBase::RegisterGuestViewTypes() { 686 void GuestViewBase::RegisterGuestViewTypes() {
661 AppViewGuest::Register(); 687 AppViewGuest::Register();
662 ExtensionOptionsGuest::Register(); 688 ExtensionOptionsGuest::Register();
663 MimeHandlerViewGuest::Register(); 689 MimeHandlerViewGuest::Register();
664 SurfaceWorkerGuest::Register(); 690 SurfaceWorkerGuest::Register();
665 WebViewGuest::Register(); 691 WebViewGuest::Register();
666 } 692 }
667 693
668 } // namespace extensions 694 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698