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 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |