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

Side by Side Diff: content/browser/browser_plugin/browser_plugin_guest.cc

Issue 13467038: Browser Plugin: Expose frame name changes to the content API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated Created 7 years, 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/browser/browser_plugin/browser_plugin_guest.h" 5 #include "content/browser/browser_plugin/browser_plugin_guest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 IPC_END_MESSAGE_MAP() 200 IPC_END_MESSAGE_MAP()
201 return handled; 201 return handled;
202 } 202 }
203 203
204 void BrowserPluginGuest::Initialize( 204 void BrowserPluginGuest::Initialize(
205 WebContentsImpl* embedder_web_contents, 205 WebContentsImpl* embedder_web_contents,
206 const BrowserPluginHostMsg_CreateGuest_Params& params) { 206 const BrowserPluginHostMsg_CreateGuest_Params& params) {
207 focused_ = params.focused; 207 focused_ = params.focused;
208 guest_visible_ = params.visible; 208 guest_visible_ = params.visible;
209 if (!params.name.empty()) 209 if (!params.name.empty())
210 name_ = params.name; 210 GetWebContents()->SetWindowName(params.name);
Charlie Reis 2013/04/18 21:26:51 Why is this needed? Won't the RenderView tell the
211 auto_size_enabled_ = params.auto_size_params.enable; 211 auto_size_enabled_ = params.auto_size_params.enable;
212 max_auto_size_ = params.auto_size_params.max_size; 212 max_auto_size_ = params.auto_size_params.max_size;
213 min_auto_size_ = params.auto_size_params.min_size; 213 min_auto_size_ = params.auto_size_params.min_size;
214 214
215 // Once a BrowserPluginGuest has an embedder WebContents, it's considered to 215 // Once a BrowserPluginGuest has an embedder WebContents, it's considered to
216 // be attached. 216 // be attached.
217 embedder_web_contents_ = embedder_web_contents; 217 embedder_web_contents_ = embedder_web_contents;
218 218
219 // |render_view_host| manages the ownership of this BrowserPluginGuestHelper. 219 // |render_view_host| manages the ownership of this BrowserPluginGuestHelper.
220 new BrowserPluginGuestHelper(this, GetWebContents()->GetRenderViewHost()); 220 new BrowserPluginGuestHelper(this, GetWebContents()->GetRenderViewHost());
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 366
367 void BrowserPluginGuest::WebContentsCreated(WebContents* source_contents, 367 void BrowserPluginGuest::WebContentsCreated(WebContents* source_contents,
368 int64 source_frame_id, 368 int64 source_frame_id,
369 const string16& frame_name, 369 const string16& frame_name,
370 const GURL& target_url, 370 const GURL& target_url,
371 WebContents* new_contents) { 371 WebContents* new_contents) {
372 WebContentsImpl* new_contents_impl = 372 WebContentsImpl* new_contents_impl =
373 static_cast<WebContentsImpl*>(new_contents); 373 static_cast<WebContentsImpl*>(new_contents);
374 BrowserPluginGuest* guest = new_contents_impl->GetBrowserPluginGuest(); 374 BrowserPluginGuest* guest = new_contents_impl->GetBrowserPluginGuest();
375 guest->opener_ = this; 375 guest->opener_ = this;
376 guest->name_ = UTF16ToUTF8(frame_name); 376 new_contents_impl->SetWindowName(UTF16ToUTF8(frame_name));
Charlie Reis 2013/04/18 21:26:51 Again, won't RenderView tell us?
377 // Take ownership of the new guest until it is attached to the embedder's DOM 377 // Take ownership of the new guest until it is attached to the embedder's DOM
378 // tree to avoid leaking a guest if this guest is destroyed before attaching 378 // tree to avoid leaking a guest if this guest is destroyed before attaching
379 // the new guest. 379 // the new guest.
380 pending_new_windows_.insert(make_pair(guest, target_url.spec())); 380 pending_new_windows_.insert(make_pair(guest, target_url.spec()));
381 } 381 }
382 382
383 void BrowserPluginGuest::RendererUnresponsive(WebContents* source) { 383 void BrowserPluginGuest::RendererUnresponsive(WebContents* source) {
384 int process_id = 384 int process_id =
385 GetWebContents()->GetRenderProcessHost()->GetID(); 385 GetWebContents()->GetRenderProcessHost()->GetID();
386 SendMessageToEmbedder( 386 SendMessageToEmbedder(
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 // Initiating a drag from inside a guest is currently not supported. So inject 609 // Initiating a drag from inside a guest is currently not supported. So inject
610 // some JS to disable it. http://crbug.com/161112 610 // some JS to disable it. http://crbug.com/161112
611 const char script[] = "window.addEventListener('dragstart', function() { " 611 const char script[] = "window.addEventListener('dragstart', function() { "
612 " window.event.preventDefault(); " 612 " window.event.preventDefault(); "
613 "});"; 613 "});";
614 render_view_host->ExecuteJavascriptInWebFrame(string16(), 614 render_view_host->ExecuteJavascriptInWebFrame(string16(),
615 ASCIIToUTF16(script)); 615 ASCIIToUTF16(script));
616 SendMessageToEmbedder(new BrowserPluginMsg_LoadStop(instance_id())); 616 SendMessageToEmbedder(new BrowserPluginMsg_LoadStop(instance_id()));
617 } 617 }
618 618
619 void BrowserPluginGuest::DidUpdateFrameName(int frame_id,
620 bool is_top_level,
621 const std::string& name,
622 RenderViewHost* render_view_host) {
623 if (!is_top_level)
624 return;
625
626 SendMessageToEmbedder(new BrowserPluginMsg_UpdatedName(instance_id_, name));
627 }
628
619 void BrowserPluginGuest::RenderViewReady() { 629 void BrowserPluginGuest::RenderViewReady() {
620 // TODO(fsamuel): Investigate whether it's possible to update state earlier 630 // TODO(fsamuel): Investigate whether it's possible to update state earlier
621 // here (see http://crbug.com/158151). 631 // here (see http://crbug.com/158151).
622 Send(new ViewMsg_SetFocus(routing_id(), focused_)); 632 Send(new ViewMsg_SetFocus(routing_id(), focused_));
623 UpdateVisibility(); 633 UpdateVisibility();
624 RenderViewHost* rvh = GetWebContents()->GetRenderViewHost(); 634 RenderViewHost* rvh = GetWebContents()->GetRenderViewHost();
625 if (auto_size_enabled_) 635 if (auto_size_enabled_)
626 rvh->EnableAutoResize(min_auto_size_, max_auto_size_); 636 rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
627 else 637 else
628 rvh->DisableAutoResize(damage_view_size_); 638 rvh->DisableAutoResize(damage_view_size_);
629 639
630 Send(new ViewMsg_SetName(routing_id(), name_));
631
632 RenderWidgetHostImpl::From(rvh)-> 640 RenderWidgetHostImpl::From(rvh)->
633 set_hung_renderer_delay_ms(guest_hang_timeout_); 641 set_hung_renderer_delay_ms(guest_hang_timeout_);
634 } 642 }
635 643
636 void BrowserPluginGuest::RenderViewGone(base::TerminationStatus status) { 644 void BrowserPluginGuest::RenderViewGone(base::TerminationStatus status) {
637 int process_id = GetWebContents()->GetRenderProcessHost()->GetID(); 645 int process_id = GetWebContents()->GetRenderProcessHost()->GetID();
638 SendMessageToEmbedder( 646 SendMessageToEmbedder(
639 new BrowserPluginMsg_GuestGone(instance_id(), process_id, status)); 647 new BrowserPluginMsg_GuestGone(instance_id(), process_id, status));
640 switch (status) { 648 switch (status) {
641 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: 649 case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 #if defined(OS_MACOSX) 714 #if defined(OS_MACOSX)
707 // MacOSX creates and populates platform-specific select drop-down menus 715 // MacOSX creates and populates platform-specific select drop-down menus
708 // whereas other platforms merely create a popup window that the guest 716 // whereas other platforms merely create a popup window that the guest
709 // renderer process paints inside. 717 // renderer process paints inside.
710 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowPopup, OnShowPopup) 718 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowPopup, OnShowPopup)
711 #endif 719 #endif
712 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnShowWidget) 720 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnShowWidget)
713 IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus) 721 IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus)
714 IPC_MESSAGE_HANDLER(ViewHostMsg_UnlockMouse, OnUnlockMouse) 722 IPC_MESSAGE_HANDLER(ViewHostMsg_UnlockMouse, OnUnlockMouse)
715 IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor) 723 IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor)
716 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateFrameName, OnUpdateFrameName)
717 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect) 724 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect)
718 IPC_MESSAGE_UNHANDLED(handled = false) 725 IPC_MESSAGE_UNHANDLED(handled = false)
719 IPC_END_MESSAGE_MAP() 726 IPC_END_MESSAGE_MAP()
720 return handled; 727 return handled;
721 } 728 }
722 729
723 void BrowserPluginGuest::Attach( 730 void BrowserPluginGuest::Attach(
724 WebContentsImpl* embedder_web_contents, 731 WebContentsImpl* embedder_web_contents,
725 BrowserPluginHostMsg_CreateGuest_Params params) { 732 BrowserPluginHostMsg_CreateGuest_Params params) {
726 const std::string target_url = opener()->pending_new_windows_[this]; 733 const std::string target_url = opener()->pending_new_windows_[this];
727 if (!GetWebContents()->opener()) { 734 if (!GetWebContents()->opener()) {
728 // For guests that have a suppressed opener, we navigate now. 735 // For guests that have a suppressed opener, we navigate now.
729 // Navigation triggers the creation of a RenderWidgetHostViewGuest so 736 // Navigation triggers the creation of a RenderWidgetHostViewGuest so
730 // we don't need to create one manually. 737 // we don't need to create one manually.
731 params.src = target_url; 738 params.src = target_url;
732 } else { 739 } else {
733 // Ensure that the newly attached guest gets a RenderWidgetHostViewGuest. 740 // Ensure that the newly attached guest gets a RenderWidgetHostViewGuest.
734 WebContentsViewGuest* new_view = 741 WebContentsViewGuest* new_view =
735 static_cast<WebContentsViewGuest*>(GetWebContents()->GetView()); 742 static_cast<WebContentsViewGuest*>(GetWebContents()->GetView());
736 new_view->CreateViewForWidget(web_contents()->GetRenderViewHost()); 743 new_view->CreateViewForWidget(web_contents()->GetRenderViewHost());
737 } 744 }
738 // Once a new guest is attached to the DOM of the embedder page, then the 745 // Once a new guest is attached to the DOM of the embedder page, then the
739 // lifetime of the new guest is no longer managed by the opener guest. 746 // lifetime of the new guest is no longer managed by the opener guest.
740 opener()->pending_new_windows_.erase(this); 747 opener()->pending_new_windows_.erase(this);
741 748
742 // The guest's frame name takes precedence over the BrowserPlugin's name. 749 // The guest's frame name takes precedence over the BrowserPlugin's name.
743 // The guest's frame name is assigned in 750 // The guest's frame name is assigned in
744 // BrowserPluginGuest::WebContentsCreated. 751 // BrowserPluginGuest::WebContentsCreated.
745 if (!name_.empty()) 752 if (!GetWebContents()->GetWindowName().empty())
746 params.name.clear(); 753 params.name.clear();
747 754
748 Initialize(embedder_web_contents, params); 755 Initialize(embedder_web_contents, params);
749 756
750 // We initialize the RenderViewHost after a BrowserPlugin has been attached 757 // We initialize the RenderViewHost after a BrowserPlugin has been attached
751 // to it and is ready to receive pixels. Until a RenderViewHost is 758 // to it and is ready to receive pixels. Until a RenderViewHost is
752 // initialized, it will not allow any resize requests. 759 // initialized, it will not allow any resize requests.
753 if (!GetWebContents()->GetRenderViewHost()->IsRenderViewLive()) { 760 if (!GetWebContents()->GetRenderViewHost()->IsRenderViewLive()) {
754 static_cast<RenderViewHostImpl*>( 761 static_cast<RenderViewHostImpl*>(
755 GetWebContents()->GetRenderViewHost())->Init(); 762 GetWebContents()->GetRenderViewHost())->Init();
756 } 763 }
757 764
758 // Inform the embedder of the guest's information. 765 // Inform the embedder of the guest's information.
759 // We pull the partition information from the site's URL, which is of the form 766 // We pull the partition information from the site's URL, which is of the form
760 // guest://site/{persist}?{partition_name}. 767 // guest://site/{persist}?{partition_name}.
761 const GURL& site_url = GetWebContents()->GetSiteInstance()->GetSiteURL(); 768 const GURL& site_url = GetWebContents()->GetSiteInstance()->GetSiteURL();
762 BrowserPluginMsg_Attach_ACK_Params ack_params; 769 BrowserPluginMsg_Attach_ACK_Params ack_params;
763 ack_params.storage_partition_id = site_url.query(); 770 ack_params.storage_partition_id = site_url.query();
764 ack_params.persist_storage = 771 ack_params.persist_storage =
765 site_url.path().find("persist") != std::string::npos; 772 site_url.path().find("persist") != std::string::npos;
766 ack_params.name = name_; 773 ack_params.name = GetWebContents()->GetWindowName();
767 SendMessageToEmbedder( 774 SendMessageToEmbedder(
768 new BrowserPluginMsg_Attach_ACK(instance_id_, ack_params)); 775 new BrowserPluginMsg_Attach_ACK(instance_id_, ack_params));
769 } 776 }
770 777
771 void BrowserPluginGuest::OnCompositorFrameACK( 778 void BrowserPluginGuest::OnCompositorFrameACK(
772 int instance_id, 779 int instance_id,
773 int route_id, 780 int route_id,
774 int renderer_host_id, 781 int renderer_host_id,
775 const cc::CompositorFrameAck& ack) { 782 const cc::CompositorFrameAck& ack) {
776 RenderWidgetHostImpl::SendSwapCompositorFrameAck(route_id, 783 RenderWidgetHostImpl::SendSwapCompositorFrameAck(route_id,
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 } 955 }
949 956
950 void BrowserPluginGuest::OnSetFocus(int instance_id, bool focused) { 957 void BrowserPluginGuest::OnSetFocus(int instance_id, bool focused) {
951 if (focused_ == focused) 958 if (focused_ == focused)
952 return; 959 return;
953 focused_ = focused; 960 focused_ = focused;
954 Send(new ViewMsg_SetFocus(routing_id(), focused)); 961 Send(new ViewMsg_SetFocus(routing_id(), focused));
955 } 962 }
956 963
957 void BrowserPluginGuest::OnSetName(int instance_id, const std::string& name) { 964 void BrowserPluginGuest::OnSetName(int instance_id, const std::string& name) {
958 if (name == name_) 965 GetWebContents()->SetWindowName(name);
Charlie Reis 2013/04/18 21:26:51 Again, why is this needed? If we change the name
959 return;
960 name_ = name;
961 Send(new ViewMsg_SetName(routing_id(), name));
962 } 966 }
963 967
964 void BrowserPluginGuest::OnSetSize( 968 void BrowserPluginGuest::OnSetSize(
965 int instance_id, 969 int instance_id,
966 const BrowserPluginHostMsg_AutoSize_Params& auto_size_params, 970 const BrowserPluginHostMsg_AutoSize_Params& auto_size_params,
967 const BrowserPluginHostMsg_ResizeGuest_Params& resize_guest_params) { 971 const BrowserPluginHostMsg_ResizeGuest_Params& resize_guest_params) {
968 bool old_auto_size_enabled = auto_size_enabled_; 972 bool old_auto_size_enabled = auto_size_enabled_;
969 gfx::Size old_max_size = max_auto_size_; 973 gfx::Size old_max_size = max_auto_size_;
970 gfx::Size old_min_size = min_auto_size_; 974 gfx::Size old_min_size = min_auto_size_;
971 auto_size_enabled_ = auto_size_params.enable; 975 auto_size_enabled_ = auto_size_params.enable;
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 RenderViewHostImpl* embedder_render_view_host = 1120 RenderViewHostImpl* embedder_render_view_host =
1117 static_cast<RenderViewHostImpl*>( 1121 static_cast<RenderViewHostImpl*>(
1118 embedder_web_contents_->GetRenderViewHost()); 1122 embedder_web_contents_->GetRenderViewHost());
1119 CHECK(embedder_render_view_host); 1123 CHECK(embedder_render_view_host);
1120 RenderViewHostDelegateView* view = 1124 RenderViewHostDelegateView* view =
1121 embedder_render_view_host->GetDelegate()->GetDelegateView(); 1125 embedder_render_view_host->GetDelegate()->GetDelegateView();
1122 if (view) 1126 if (view)
1123 view->UpdateDragCursor(operation); 1127 view->UpdateDragCursor(operation);
1124 } 1128 }
1125 1129
1126 void BrowserPluginGuest::OnUpdateFrameName(int frame_id,
1127 bool is_top_level,
1128 const std::string& name) {
1129 if (!is_top_level)
1130 return;
1131
1132 name_ = name;
1133 SendMessageToEmbedder(new BrowserPluginMsg_UpdatedName(instance_id_, name));
1134 }
1135
1136 void BrowserPluginGuest::RequestMediaAccessPermission( 1130 void BrowserPluginGuest::RequestMediaAccessPermission(
1137 WebContents* web_contents, 1131 WebContents* web_contents,
1138 const MediaStreamRequest& request, 1132 const MediaStreamRequest& request,
1139 const MediaResponseCallback& callback) { 1133 const MediaResponseCallback& callback) {
1140 if (media_requests_map_.size() >= kNumMaxOutstandingPermissionRequests) { 1134 if (media_requests_map_.size() >= kNumMaxOutstandingPermissionRequests) {
1141 // Deny the media request. 1135 // Deny the media request.
1142 callback.Run(MediaStreamDevices()); 1136 callback.Run(MediaStreamDevices());
1143 return; 1137 return;
1144 } 1138 }
1145 int request_id = next_permission_request_id_++; 1139 int request_id = next_permission_request_id_++;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 base::Value::CreateStringValue(request_method)); 1314 base::Value::CreateStringValue(request_method));
1321 request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url)); 1315 request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url));
1322 1316
1323 SendMessageToEmbedder( 1317 SendMessageToEmbedder(
1324 new BrowserPluginMsg_RequestPermission(instance_id(), 1318 new BrowserPluginMsg_RequestPermission(instance_id(),
1325 BrowserPluginPermissionTypeDownload, permission_request_id, 1319 BrowserPluginPermissionTypeDownload, permission_request_id,
1326 request_info)); 1320 request_info));
1327 } 1321 }
1328 1322
1329 } // namespace content 1323 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698