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

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: Removed code from one non-essential function that was causing tests to fail. It will be re-added in… 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/page_zoom.h" 9 #include "components/ui/zoom/page_zoom.h"
10 #include "components/ui/zoom/zoom_controller.h" 10 #include "components/ui/zoom/zoom_controller.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 auto it = guest_view_registry.Get().find(view_type); 275 auto it = guest_view_registry.Get().find(view_type);
261 DCHECK(it == guest_view_registry.Get().end()); 276 DCHECK(it == guest_view_registry.Get().end());
262 guest_view_registry.Get()[view_type] = callback; 277 guest_view_registry.Get()[view_type] = callback;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 StopTrackingEmbedderZoomLevel(); 368 StopTrackingEmbedderZoomLevel();
354 owner_web_contents()->Send(new ExtensionMsg_GuestDetached( 369 owner_web_contents()->Send(new ExtensionMsg_GuestDetached(
355 element_instance_id_)); 370 element_instance_id_));
356 element_instance_id_ = guestview::kInstanceIDNone; 371 element_instance_id_ = guestview::kInstanceIDNone;
357 } 372 }
358 373
359 void GuestViewBase::ElementSizeChanged(const gfx::Size& size) { 374 void GuestViewBase::ElementSizeChanged(const gfx::Size& size) {
360 element_size_ = size; 375 element_size_ = size;
361 376
362 // Only resize if needed. 377 // Only resize if needed.
363 if (!size.IsEmpty()) 378 if (!size.IsEmpty()) {
364 guest_sizer_->SizeContents(size); 379 guest_sizer_->SizeContents(size);
380 guest_size_ = size;
381 }
365 } 382 }
366 383
367 WebContents* GuestViewBase::GetOwnerWebContents() const { 384 WebContents* GuestViewBase::GetOwnerWebContents() const {
368 return owner_web_contents_; 385 return owner_web_contents_;
369 } 386 }
370 387
371 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size, 388 void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size,
372 const gfx::Size& new_size) { 389 const gfx::Size& new_size) {
390 DispatchOnResizeEvent(old_size, new_size);
373 if (!auto_size_enabled_) 391 if (!auto_size_enabled_)
374 return; 392 return;
375 guest_size_ = new_size; 393 guest_size_ = new_size;
376 GuestSizeChangedDueToAutoSize(old_size, new_size); 394 GuestSizeChangedDueToAutoSize(old_size, new_size);
377 } 395 }
378 396
379 const GURL& GuestViewBase::GetOwnerSiteURL() const { 397 const GURL& GuestViewBase::GetOwnerSiteURL() const {
380 return owner_web_contents()->GetLastCommittedURL(); 398 return owner_web_contents()->GetLastCommittedURL();
381 } 399 }
382 400
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 ui_zoom::ZoomController::FromWebContents(web_contents()); 584 ui_zoom::ZoomController::FromWebContents(web_contents());
567 if (content::ZoomValuesEqual(data.new_zoom_level, 585 if (content::ZoomValuesEqual(data.new_zoom_level,
568 guest_zoom_controller->GetZoomLevel())) { 586 guest_zoom_controller->GetZoomLevel())) {
569 return; 587 return;
570 } 588 }
571 // When the embedder's zoom level doesn't match the guest's, then update the 589 // When the embedder's zoom level doesn't match the guest's, then update the
572 // guest's zoom level to match. 590 // guest's zoom level to match.
573 guest_zoom_controller->SetZoomLevel(data.new_zoom_level); 591 guest_zoom_controller->SetZoomLevel(data.new_zoom_level);
574 } 592 }
575 593
576 void GuestViewBase::DispatchEventToEmbedder(Event* event) { 594 void GuestViewBase::DispatchEventToGuestProxy(Event* event) {
577 scoped_ptr<Event> event_ptr(event); 595 DispatchEvent(event, guest_instance_id_);
596 }
578 597
598 void GuestViewBase::DispatchEventToView(Event* event) {
579 if (!attached() && 599 if (!attached() &&
580 (!CanRunInDetachedState() || !can_owner_receive_events())) { 600 (!CanRunInDetachedState() || !can_owner_receive_events())) {
581 pending_events_.push_back(linked_ptr<Event>(event_ptr.release())); 601 pending_events_.push_back(linked_ptr<Event>(event));
582 return; 602 return;
583 } 603 }
584 604
605 DispatchEvent(event, view_instance_id_);
606 }
607
608 void GuestViewBase::DispatchEvent(Event* event, int instance_id) {
609 scoped_ptr<Event> event_ptr(event);
610
585 EventFilteringInfo info; 611 EventFilteringInfo info;
586 info.SetInstanceID(view_instance_id_); 612 info.SetInstanceID(instance_id);
587 scoped_ptr<base::ListValue> args(new base::ListValue()); 613 scoped_ptr<base::ListValue> args(new base::ListValue());
588 args->Append(event->GetArguments().release()); 614 args->Append(event->GetArguments().release());
589 615
590 EventRouter::DispatchEvent( 616 EventRouter::DispatchEvent(
591 owner_web_contents_, 617 owner_web_contents_,
592 browser_context_, 618 browser_context_,
593 owner_extension_id_, 619 owner_extension_id_,
594 event->name(), 620 event->name(),
595 args.Pass(), 621 args.Pass(),
596 EventRouter::USER_GESTURE_UNKNOWN, 622 EventRouter::USER_GESTURE_UNKNOWN,
597 info); 623 info);
598 } 624 }
599 625
600 void GuestViewBase::SendQueuedEvents() { 626 void GuestViewBase::SendQueuedEvents() {
601 if (!attached()) 627 if (!attached())
602 return; 628 return;
603 while (!pending_events_.empty()) { 629 while (!pending_events_.empty()) {
604 linked_ptr<Event> event_ptr = pending_events_.front(); 630 linked_ptr<Event> event_ptr = pending_events_.front();
605 pending_events_.pop_front(); 631 pending_events_.pop_front();
606 DispatchEventToEmbedder(event_ptr.release()); 632 DispatchEvent(event_ptr.release(), view_instance_id_);
607 } 633 }
608 } 634 }
609 635
610 void GuestViewBase::CompleteInit( 636 void GuestViewBase::CompleteInit(
611 scoped_ptr<base::DictionaryValue> create_params, 637 scoped_ptr<base::DictionaryValue> create_params,
612 const WebContentsCreatedCallback& callback, 638 const WebContentsCreatedCallback& callback,
613 content::WebContents* guest_web_contents) { 639 content::WebContents* guest_web_contents) {
614 if (!guest_web_contents) { 640 if (!guest_web_contents) {
615 // The derived class did not create a WebContents so this class serves no 641 // The derived class did not create a WebContents so this class serves no
616 // purpose. Let's self-destruct. 642 // purpose. Let's self-destruct.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 // static 701 // static
676 void GuestViewBase::RegisterGuestViewTypes() { 702 void GuestViewBase::RegisterGuestViewTypes() {
677 AppViewGuest::Register(); 703 AppViewGuest::Register();
678 ExtensionOptionsGuest::Register(); 704 ExtensionOptionsGuest::Register();
679 MimeHandlerViewGuest::Register(); 705 MimeHandlerViewGuest::Register();
680 SurfaceWorkerGuest::Register(); 706 SurfaceWorkerGuest::Register();
681 WebViewGuest::Register(); 707 WebViewGuest::Register();
682 } 708 }
683 709
684 } // namespace extensions 710 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.h ('k') | extensions/browser/guest_view/web_view/web_view_find_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698