OLD | NEW |
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 828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
839 } | 839 } |
840 | 840 |
841 RenderWidgetHostViewPort* WebContentsImpl::GetRenderWidgetHostViewPort() const { | 841 RenderWidgetHostViewPort* WebContentsImpl::GetRenderWidgetHostViewPort() const { |
842 BrowserPluginGuest* guest = GetBrowserPluginGuest(); | 842 BrowserPluginGuest* guest = GetBrowserPluginGuest(); |
843 if (guest && guest->embedder_web_contents()) { | 843 if (guest && guest->embedder_web_contents()) { |
844 return guest->embedder_web_contents()->GetRenderWidgetHostViewPort(); | 844 return guest->embedder_web_contents()->GetRenderWidgetHostViewPort(); |
845 } | 845 } |
846 return RenderWidgetHostViewPort::FromRWHV(GetRenderWidgetHostView()); | 846 return RenderWidgetHostViewPort::FromRWHV(GetRenderWidgetHostView()); |
847 } | 847 } |
848 | 848 |
| 849 RenderWidgetHostView* WebContentsImpl::GetFullscreenRenderWidgetHostView() |
| 850 const { |
| 851 RenderWidgetHost* const widget_host = |
| 852 RenderWidgetHostImpl::FromID(GetRenderProcessHost()->GetID(), |
| 853 GetFullscreenWidgetRoutingID()); |
| 854 return widget_host ? widget_host->GetView() : NULL; |
| 855 } |
| 856 |
849 WebContentsView* WebContentsImpl::GetView() const { | 857 WebContentsView* WebContentsImpl::GetView() const { |
850 return view_.get(); | 858 return view_.get(); |
851 } | 859 } |
852 | 860 |
853 WebUI* WebContentsImpl::CreateWebUI(const GURL& url) { | 861 WebUI* WebContentsImpl::CreateWebUI(const GURL& url) { |
854 WebUIImpl* web_ui = new WebUIImpl(this); | 862 WebUIImpl* web_ui = new WebUIImpl(this); |
855 WebUIController* controller = WebUIControllerFactoryRegistry::GetInstance()-> | 863 WebUIController* controller = WebUIControllerFactoryRegistry::GetInstance()-> |
856 CreateWebUIControllerForURL(web_ui, url); | 864 CreateWebUIControllerForURL(web_ui, url); |
857 if (controller) { | 865 if (controller) { |
858 web_ui->AddMessageHandler(new GenericHandler()); | 866 web_ui->AddMessageHandler(new GenericHandler()); |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1321 return; | 1329 return; |
1322 } | 1330 } |
1323 | 1331 |
1324 std::set<RenderWidgetHostImpl*>::iterator iter = | 1332 std::set<RenderWidgetHostImpl*>::iterator iter = |
1325 created_widgets_.find(render_widget_host); | 1333 created_widgets_.find(render_widget_host); |
1326 if (iter != created_widgets_.end()) | 1334 if (iter != created_widgets_.end()) |
1327 created_widgets_.erase(iter); | 1335 created_widgets_.erase(iter); |
1328 | 1336 |
1329 if (render_widget_host && | 1337 if (render_widget_host && |
1330 render_widget_host->GetRoutingID() == fullscreen_widget_routing_id_) { | 1338 render_widget_host->GetRoutingID() == fullscreen_widget_routing_id_) { |
| 1339 if (delegate_ && delegate_->EmbedsFullscreenWidget()) |
| 1340 delegate_->ToggleFullscreenModeForTab(this, false); |
1331 FOR_EACH_OBSERVER(WebContentsObserver, | 1341 FOR_EACH_OBSERVER(WebContentsObserver, |
1332 observers_, | 1342 observers_, |
1333 DidDestroyFullscreenWidget( | 1343 DidDestroyFullscreenWidget( |
1334 fullscreen_widget_routing_id_)); | 1344 fullscreen_widget_routing_id_)); |
1335 fullscreen_widget_routing_id_ = MSG_ROUTING_NONE; | 1345 fullscreen_widget_routing_id_ = MSG_ROUTING_NONE; |
1336 } | 1346 } |
1337 } | 1347 } |
1338 | 1348 |
1339 bool WebContentsImpl::PreHandleKeyboardEvent( | 1349 bool WebContentsImpl::PreHandleKeyboardEvent( |
1340 const NativeWebKeyboardEvent& event, | 1350 const NativeWebKeyboardEvent& event, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1398 if (delegate_) | 1408 if (delegate_) |
1399 delegate_->HandleGestureBegin(); | 1409 delegate_->HandleGestureBegin(); |
1400 } | 1410 } |
1401 | 1411 |
1402 void WebContentsImpl::HandleGestureEnd() { | 1412 void WebContentsImpl::HandleGestureEnd() { |
1403 if (delegate_) | 1413 if (delegate_) |
1404 delegate_->HandleGestureEnd(); | 1414 delegate_->HandleGestureEnd(); |
1405 } | 1415 } |
1406 | 1416 |
1407 void WebContentsImpl::ToggleFullscreenMode(bool enter_fullscreen) { | 1417 void WebContentsImpl::ToggleFullscreenMode(bool enter_fullscreen) { |
| 1418 // This method is being called to enter or leave renderer-initiated fullscreen |
| 1419 // mode. Either way, make sure any existing fullscreen widget is shut down |
| 1420 // first. |
| 1421 RenderWidgetHostView* const widget_view = GetFullscreenRenderWidgetHostView(); |
| 1422 if (widget_view) |
| 1423 RenderWidgetHostImpl::From(widget_view->GetRenderWidgetHost())->Shutdown(); |
| 1424 |
1408 if (delegate_) | 1425 if (delegate_) |
1409 delegate_->ToggleFullscreenModeForTab(this, enter_fullscreen); | 1426 delegate_->ToggleFullscreenModeForTab(this, enter_fullscreen); |
1410 } | 1427 } |
1411 | 1428 |
1412 bool WebContentsImpl::IsFullscreenForCurrentTab() const { | 1429 bool WebContentsImpl::IsFullscreenForCurrentTab() const { |
1413 return delegate_ ? delegate_->IsFullscreenForTabOrPending(this) : false; | 1430 return delegate_ ? delegate_->IsFullscreenForTabOrPending(this) : false; |
1414 } | 1431 } |
1415 | 1432 |
1416 void WebContentsImpl::RequestToLockMouse(bool user_gesture, | 1433 void WebContentsImpl::RequestToLockMouse(bool user_gesture, |
1417 bool last_unlocked_by_target) { | 1434 bool last_unlocked_by_target) { |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1594 } | 1611 } |
1595 } | 1612 } |
1596 | 1613 |
1597 void WebContentsImpl::ShowCreatedWidget(int route_id, | 1614 void WebContentsImpl::ShowCreatedWidget(int route_id, |
1598 const gfx::Rect& initial_pos) { | 1615 const gfx::Rect& initial_pos) { |
1599 ShowCreatedWidget(route_id, false, initial_pos); | 1616 ShowCreatedWidget(route_id, false, initial_pos); |
1600 } | 1617 } |
1601 | 1618 |
1602 void WebContentsImpl::ShowCreatedFullscreenWidget(int route_id) { | 1619 void WebContentsImpl::ShowCreatedFullscreenWidget(int route_id) { |
1603 ShowCreatedWidget(route_id, true, gfx::Rect()); | 1620 ShowCreatedWidget(route_id, true, gfx::Rect()); |
1604 | |
1605 DCHECK_EQ(MSG_ROUTING_NONE, fullscreen_widget_routing_id_); | |
1606 fullscreen_widget_routing_id_ = route_id; | |
1607 FOR_EACH_OBSERVER(WebContentsObserver, | |
1608 observers_, | |
1609 DidShowFullscreenWidget(route_id)); | |
1610 } | 1621 } |
1611 | 1622 |
1612 void WebContentsImpl::ShowCreatedWidget(int route_id, | 1623 void WebContentsImpl::ShowCreatedWidget(int route_id, |
1613 bool is_fullscreen, | 1624 bool is_fullscreen, |
1614 const gfx::Rect& initial_pos) { | 1625 const gfx::Rect& initial_pos) { |
1615 if (delegate_) | 1626 if (delegate_) |
1616 delegate_->RenderWidgetShowing(); | 1627 delegate_->RenderWidgetShowing(); |
1617 | 1628 |
1618 RenderWidgetHostViewPort* widget_host_view = | 1629 RenderWidgetHostViewPort* widget_host_view = |
1619 RenderWidgetHostViewPort::FromRWHV(GetCreatedWidget(route_id)); | 1630 RenderWidgetHostViewPort::FromRWHV(GetCreatedWidget(route_id)); |
1620 if (!widget_host_view) | 1631 if (!widget_host_view) |
1621 return; | 1632 return; |
1622 if (is_fullscreen) | 1633 bool allow_privileged = false; |
1623 widget_host_view->InitAsFullscreen(GetRenderWidgetHostViewPort()); | 1634 if (is_fullscreen) { |
1624 else | 1635 if (delegate_ && delegate_->EmbedsFullscreenWidget()) { |
| 1636 widget_host_view->InitAsChild(GetRenderWidgetHostView()->GetNativeView()); |
| 1637 delegate_->ToggleFullscreenModeForTab(this, true); |
| 1638 } else { |
| 1639 widget_host_view->InitAsFullscreen(GetRenderWidgetHostViewPort()); |
| 1640 // Only allow privileged mouse lock for fullscreen render widget, which is |
| 1641 // used to implement Pepper Flash fullscreen. |
| 1642 allow_privileged = true; |
| 1643 } |
| 1644 |
| 1645 DCHECK_EQ(MSG_ROUTING_NONE, fullscreen_widget_routing_id_); |
| 1646 fullscreen_widget_routing_id_ = route_id; |
| 1647 FOR_EACH_OBSERVER(WebContentsObserver, |
| 1648 observers_, |
| 1649 DidShowFullscreenWidget(route_id)); |
| 1650 if (!widget_host_view->HasFocus()) |
| 1651 widget_host_view->Focus(); |
| 1652 } else { |
1625 widget_host_view->InitAsPopup(GetRenderWidgetHostViewPort(), initial_pos); | 1653 widget_host_view->InitAsPopup(GetRenderWidgetHostViewPort(), initial_pos); |
| 1654 } |
1626 | 1655 |
1627 RenderWidgetHostImpl* render_widget_host_impl = | 1656 RenderWidgetHostImpl* render_widget_host_impl = |
1628 RenderWidgetHostImpl::From(widget_host_view->GetRenderWidgetHost()); | 1657 RenderWidgetHostImpl::From(widget_host_view->GetRenderWidgetHost()); |
1629 render_widget_host_impl->Init(); | 1658 render_widget_host_impl->Init(); |
1630 // Only allow privileged mouse lock for fullscreen render widget, which is | 1659 render_widget_host_impl->set_allow_privileged_mouse_lock(allow_privileged); |
1631 // used to implement Pepper Flash fullscreen. | 1660 // TODO(miu): For now, all mouse lock requests by embedded Flash fullscreen |
1632 render_widget_host_impl->set_allow_privileged_mouse_lock(is_fullscreen); | 1661 // will be denied. This is to be rectified in a soon-upcoming change. |
1633 | 1662 |
1634 #if defined(OS_MACOSX) | 1663 #if defined(OS_MACOSX) |
1635 // A RenderWidgetHostViewMac has lifetime scoped to the view. Now that it's | 1664 // A RenderWidgetHostViewMac has lifetime scoped to the view. Now that it's |
1636 // properly embedded (or purposefully ignored) we can release the retain we | 1665 // properly embedded (or purposefully ignored) we can release the retain we |
1637 // took in CreateNewWidget(). | 1666 // took in CreateNewWidget(). |
1638 base::mac::NSObjectRelease(widget_host_view->GetNativeView()); | 1667 base::mac::NSObjectRelease(widget_host_view->GetNativeView()); |
1639 #endif | 1668 #endif |
1640 } | 1669 } |
1641 | 1670 |
1642 WebContentsImpl* WebContentsImpl::GetCreatedWindow(int route_id) { | 1671 WebContentsImpl* WebContentsImpl::GetCreatedWindow(int route_id) { |
(...skipping 2188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3831 gfx::Size WebContentsImpl::GetSizeForNewRenderView() const { | 3860 gfx::Size WebContentsImpl::GetSizeForNewRenderView() const { |
3832 gfx::Size size; | 3861 gfx::Size size; |
3833 if (delegate_) | 3862 if (delegate_) |
3834 size = delegate_->GetSizeForNewRenderView(this); | 3863 size = delegate_->GetSizeForNewRenderView(this); |
3835 if (size.IsEmpty()) | 3864 if (size.IsEmpty()) |
3836 size = view_->GetContainerSize(); | 3865 size = view_->GetContainerSize(); |
3837 return size; | 3866 return size; |
3838 } | 3867 } |
3839 | 3868 |
3840 } // namespace content | 3869 } // namespace content |
OLD | NEW |