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

Side by Side Diff: content/browser/web_contents/web_contents_impl.cc

Issue 23477051: Embed Flash Fullscreen widget within browser window. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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 | Annotate | Revision Log
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/web_contents/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 } 828 }
829 829
830 RenderWidgetHostViewPort* WebContentsImpl::GetRenderWidgetHostViewPort() const { 830 RenderWidgetHostViewPort* WebContentsImpl::GetRenderWidgetHostViewPort() const {
831 BrowserPluginGuest* guest = GetBrowserPluginGuest(); 831 BrowserPluginGuest* guest = GetBrowserPluginGuest();
832 if (guest && guest->embedder_web_contents()) { 832 if (guest && guest->embedder_web_contents()) {
833 return guest->embedder_web_contents()->GetRenderWidgetHostViewPort(); 833 return guest->embedder_web_contents()->GetRenderWidgetHostViewPort();
834 } 834 }
835 return RenderWidgetHostViewPort::FromRWHV(GetRenderWidgetHostView()); 835 return RenderWidgetHostViewPort::FromRWHV(GetRenderWidgetHostView());
836 } 836 }
837 837
838 RenderWidgetHostView* WebContentsImpl::GetFullscreenRenderWidgetHostView()
839 const {
840 RenderWidgetHost* const widget_host =
841 RenderWidgetHostImpl::FromID(GetRenderProcessHost()->GetID(),
842 GetFullscreenWidgetRoutingID());
843 return widget_host ? widget_host->GetView() : NULL;
844 }
845
838 WebContentsView* WebContentsImpl::GetView() const { 846 WebContentsView* WebContentsImpl::GetView() const {
839 return view_.get(); 847 return view_.get();
840 } 848 }
841 849
842 WebUI* WebContentsImpl::CreateWebUI(const GURL& url) { 850 WebUI* WebContentsImpl::CreateWebUI(const GURL& url) {
843 WebUIImpl* web_ui = new WebUIImpl(this); 851 WebUIImpl* web_ui = new WebUIImpl(this);
844 WebUIController* controller = WebUIControllerFactoryRegistry::GetInstance()-> 852 WebUIController* controller = WebUIControllerFactoryRegistry::GetInstance()->
845 CreateWebUIControllerForURL(web_ui, url); 853 CreateWebUIControllerForURL(web_ui, url);
846 if (controller) { 854 if (controller) {
847 web_ui->AddMessageHandler(new GenericHandler()); 855 web_ui->AddMessageHandler(new GenericHandler());
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 return; 1318 return;
1311 } 1319 }
1312 1320
1313 std::set<RenderWidgetHostImpl*>::iterator iter = 1321 std::set<RenderWidgetHostImpl*>::iterator iter =
1314 created_widgets_.find(render_widget_host); 1322 created_widgets_.find(render_widget_host);
1315 if (iter != created_widgets_.end()) 1323 if (iter != created_widgets_.end())
1316 created_widgets_.erase(iter); 1324 created_widgets_.erase(iter);
1317 1325
1318 if (render_widget_host && 1326 if (render_widget_host &&
1319 render_widget_host->GetRoutingID() == fullscreen_widget_routing_id_) { 1327 render_widget_host->GetRoutingID() == fullscreen_widget_routing_id_) {
1328 if (delegate_ && delegate_->EmbedsFullscreenWidget())
1329 delegate_->ToggleFullscreenModeForTab(this, false);
1320 FOR_EACH_OBSERVER(WebContentsObserver, 1330 FOR_EACH_OBSERVER(WebContentsObserver,
1321 observers_, 1331 observers_,
1322 DidDestroyFullscreenWidget( 1332 DidDestroyFullscreenWidget(
1323 fullscreen_widget_routing_id_)); 1333 fullscreen_widget_routing_id_));
1324 fullscreen_widget_routing_id_ = MSG_ROUTING_NONE; 1334 fullscreen_widget_routing_id_ = MSG_ROUTING_NONE;
1325 } 1335 }
1326 } 1336 }
1327 1337
1328 bool WebContentsImpl::PreHandleKeyboardEvent( 1338 bool WebContentsImpl::PreHandleKeyboardEvent(
1329 const NativeWebKeyboardEvent& event, 1339 const NativeWebKeyboardEvent& event,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 if (delegate_) 1397 if (delegate_)
1388 delegate_->HandleGestureBegin(); 1398 delegate_->HandleGestureBegin();
1389 } 1399 }
1390 1400
1391 void WebContentsImpl::HandleGestureEnd() { 1401 void WebContentsImpl::HandleGestureEnd() {
1392 if (delegate_) 1402 if (delegate_)
1393 delegate_->HandleGestureEnd(); 1403 delegate_->HandleGestureEnd();
1394 } 1404 }
1395 1405
1396 void WebContentsImpl::ToggleFullscreenMode(bool enter_fullscreen) { 1406 void WebContentsImpl::ToggleFullscreenMode(bool enter_fullscreen) {
1407 // This method is being called with the intention of entering or leaving
1408 // "Tab/HTML Fullscreen" mode. Either way, make sure "Flash Fullscreen" is
jam 2013/09/11 02:48:26 nit: layering violation to mention flash here
miu 2013/09/11 03:57:03 Done.
1409 // shut down first.
1410 RenderWidgetHostView* const widget_view = GetFullscreenRenderWidgetHostView();
1411 if (widget_view)
1412 RenderWidgetHostImpl::From(widget_view->GetRenderWidgetHost())->Shutdown();
1413
1397 if (delegate_) 1414 if (delegate_)
1398 delegate_->ToggleFullscreenModeForTab(this, enter_fullscreen); 1415 delegate_->ToggleFullscreenModeForTab(this, enter_fullscreen);
1399 } 1416 }
1400 1417
1401 bool WebContentsImpl::IsFullscreenForCurrentTab() const { 1418 bool WebContentsImpl::IsFullscreenForCurrentTab() const {
1402 return delegate_ ? delegate_->IsFullscreenForTabOrPending(this) : false; 1419 return delegate_ ? delegate_->IsFullscreenForTabOrPending(this) : false;
1403 } 1420 }
1404 1421
1405 void WebContentsImpl::RequestToLockMouse(bool user_gesture, 1422 void WebContentsImpl::RequestToLockMouse(bool user_gesture,
1406 bool last_unlocked_by_target) { 1423 bool last_unlocked_by_target) {
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1583 } 1600 }
1584 } 1601 }
1585 1602
1586 void WebContentsImpl::ShowCreatedWidget(int route_id, 1603 void WebContentsImpl::ShowCreatedWidget(int route_id,
1587 const gfx::Rect& initial_pos) { 1604 const gfx::Rect& initial_pos) {
1588 ShowCreatedWidget(route_id, false, initial_pos); 1605 ShowCreatedWidget(route_id, false, initial_pos);
1589 } 1606 }
1590 1607
1591 void WebContentsImpl::ShowCreatedFullscreenWidget(int route_id) { 1608 void WebContentsImpl::ShowCreatedFullscreenWidget(int route_id) {
1592 ShowCreatedWidget(route_id, true, gfx::Rect()); 1609 ShowCreatedWidget(route_id, true, gfx::Rect());
1593
1594 DCHECK_EQ(MSG_ROUTING_NONE, fullscreen_widget_routing_id_);
1595 fullscreen_widget_routing_id_ = route_id;
1596 FOR_EACH_OBSERVER(WebContentsObserver,
1597 observers_,
1598 DidShowFullscreenWidget(route_id));
1599 } 1610 }
1600 1611
1601 void WebContentsImpl::ShowCreatedWidget(int route_id, 1612 void WebContentsImpl::ShowCreatedWidget(int route_id,
1602 bool is_fullscreen, 1613 bool is_fullscreen,
1603 const gfx::Rect& initial_pos) { 1614 const gfx::Rect& initial_pos) {
1604 if (delegate_) 1615 if (delegate_)
1605 delegate_->RenderWidgetShowing(); 1616 delegate_->RenderWidgetShowing();
1606 1617
1607 RenderWidgetHostViewPort* widget_host_view = 1618 RenderWidgetHostViewPort* widget_host_view =
1608 RenderWidgetHostViewPort::FromRWHV(GetCreatedWidget(route_id)); 1619 RenderWidgetHostViewPort::FromRWHV(GetCreatedWidget(route_id));
1609 if (!widget_host_view) 1620 if (!widget_host_view)
1610 return; 1621 return;
1611 if (is_fullscreen) 1622 bool allow_privileged = false;
1612 widget_host_view->InitAsFullscreen(GetRenderWidgetHostViewPort()); 1623 if (is_fullscreen) {
1613 else 1624 if (delegate_ && delegate_->EmbedsFullscreenWidget()) {
1625 widget_host_view->InitAsChild(GetRenderWidgetHostView()->GetNativeView());
1626 delegate_->ToggleFullscreenModeForTab(this, true);
1627 } else {
1628 widget_host_view->InitAsFullscreen(GetRenderWidgetHostViewPort());
1629 // Only allow privileged mouse lock for fullscreen render widget, which is
1630 // used to implement Pepper Flash fullscreen.
1631 allow_privileged = true;
1632 }
1633
1634 DCHECK_EQ(MSG_ROUTING_NONE, fullscreen_widget_routing_id_);
1635 fullscreen_widget_routing_id_ = route_id;
1636 FOR_EACH_OBSERVER(WebContentsObserver,
1637 observers_,
1638 DidShowFullscreenWidget(route_id));
1639 if (!widget_host_view->HasFocus())
1640 widget_host_view->Focus();
1641 } else {
1614 widget_host_view->InitAsPopup(GetRenderWidgetHostViewPort(), initial_pos); 1642 widget_host_view->InitAsPopup(GetRenderWidgetHostViewPort(), initial_pos);
1643 }
1615 1644
1616 RenderWidgetHostImpl* render_widget_host_impl = 1645 RenderWidgetHostImpl* render_widget_host_impl =
1617 RenderWidgetHostImpl::From(widget_host_view->GetRenderWidgetHost()); 1646 RenderWidgetHostImpl::From(widget_host_view->GetRenderWidgetHost());
1618 render_widget_host_impl->Init(); 1647 render_widget_host_impl->Init();
1619 // Only allow privileged mouse lock for fullscreen render widget, which is 1648 render_widget_host_impl->set_allow_privileged_mouse_lock(allow_privileged);
1620 // used to implement Pepper Flash fullscreen. 1649 // TODO(miu): For now, all mouse lock requests by embedded Flash fullscreen
1621 render_widget_host_impl->set_allow_privileged_mouse_lock(is_fullscreen); 1650 // will be denied. This is to be rectified in a soon-upcoming change.
1622 1651
1623 #if defined(OS_MACOSX) 1652 #if defined(OS_MACOSX)
1624 // A RenderWidgetHostViewMac has lifetime scoped to the view. Now that it's 1653 // A RenderWidgetHostViewMac has lifetime scoped to the view. Now that it's
1625 // properly embedded (or purposefully ignored) we can release the retain we 1654 // properly embedded (or purposefully ignored) we can release the retain we
1626 // took in CreateNewWidget(). 1655 // took in CreateNewWidget().
1627 base::mac::NSObjectRelease(widget_host_view->GetNativeView()); 1656 base::mac::NSObjectRelease(widget_host_view->GetNativeView());
1628 #endif 1657 #endif
1629 } 1658 }
1630 1659
1631 WebContentsImpl* WebContentsImpl::GetCreatedWindow(int route_id) { 1660 WebContentsImpl* WebContentsImpl::GetCreatedWindow(int route_id) {
(...skipping 2158 matching lines...) Expand 10 before | Expand all | Expand 10 after
3790 gfx::Size WebContentsImpl::GetSizeForNewRenderView() const { 3819 gfx::Size WebContentsImpl::GetSizeForNewRenderView() const {
3791 gfx::Size size; 3820 gfx::Size size;
3792 if (delegate_) 3821 if (delegate_)
3793 size = delegate_->GetSizeForNewRenderView(this); 3822 size = delegate_->GetSizeForNewRenderView(this);
3794 if (size.IsEmpty()) 3823 if (size.IsEmpty())
3795 size = view_->GetContainerSize(); 3824 size = view_->GetContainerSize();
3796 return size; 3825 return size;
3797 } 3826 }
3798 3827
3799 } // namespace content 3828 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698