| 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 |