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/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
422 WebContentsImpl::~WebContentsImpl() { | 422 WebContentsImpl::~WebContentsImpl() { |
423 is_being_destroyed_ = true; | 423 is_being_destroyed_ = true; |
424 | 424 |
425 rwh_input_event_router_.reset(); | 425 rwh_input_event_router_.reset(); |
426 | 426 |
427 // Delete all RFH pending shutdown, which will lead the corresponding RVH to | 427 // Delete all RFH pending shutdown, which will lead the corresponding RVH to |
428 // shutdown and be deleted as well. | 428 // shutdown and be deleted as well. |
429 frame_tree_.ForEach( | 429 frame_tree_.ForEach( |
430 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown)); | 430 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown)); |
431 | 431 |
| 432 // Destroy all WebUI instances. |
| 433 frame_tree_.ForEach(base::Bind(&RenderFrameHostManager::ClearWebUIInstances)); |
| 434 |
432 ClearAllPowerSaveBlockers(); | 435 ClearAllPowerSaveBlockers(); |
433 | 436 |
434 for (std::set<RenderWidgetHostImpl*>::iterator iter = | 437 for (std::set<RenderWidgetHostImpl*>::iterator iter = |
435 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { | 438 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { |
436 (*iter)->DetachDelegate(); | 439 (*iter)->DetachDelegate(); |
437 } | 440 } |
438 created_widgets_.clear(); | 441 created_widgets_.clear(); |
439 | 442 |
440 // Clear out any JavaScript state. | 443 // Clear out any JavaScript state. |
441 if (dialog_manager_) | 444 if (dialog_manager_) |
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
844 GetMainFrame()->RequestAXTreeSnapshot(callback); | 847 GetMainFrame()->RequestAXTreeSnapshot(callback); |
845 } | 848 } |
846 | 849 |
847 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url, | 850 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url, |
848 const std::string& frame_name) { | 851 const std::string& frame_name) { |
849 DCHECK(!frame_name.empty()); | 852 DCHECK(!frame_name.empty()); |
850 return CreateWebUI(url, frame_name); | 853 return CreateWebUI(url, frame_name); |
851 } | 854 } |
852 | 855 |
853 WebUI* WebContentsImpl::GetWebUI() const { | 856 WebUI* WebContentsImpl::GetWebUI() const { |
854 return GetRenderManager()->web_ui() ? GetRenderManager()->web_ui() | 857 WebUI* commited_web_ui = GetCommittedWebUI(); |
855 : GetRenderManager()->pending_web_ui(); | 858 return commited_web_ui ? commited_web_ui |
| 859 : GetRenderManager()->GetNavigatingWebUI(); |
856 } | 860 } |
857 | 861 |
858 WebUI* WebContentsImpl::GetCommittedWebUI() const { | 862 WebUI* WebContentsImpl::GetCommittedWebUI() const { |
859 return GetRenderManager()->web_ui(); | 863 return frame_tree_.root()->current_frame_host()->web_ui(); |
860 } | 864 } |
861 | 865 |
862 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { | 866 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { |
863 if (GetUserAgentOverride() == override) | 867 if (GetUserAgentOverride() == override) |
864 return; | 868 return; |
865 | 869 |
866 renderer_preferences_.user_agent_override = override; | 870 renderer_preferences_.user_agent_override = override; |
867 | 871 |
868 // Send the new override string to the renderer. | 872 // Send the new override string to the renderer. |
869 RenderViewHost* host = GetRenderViewHost(); | 873 RenderViewHost* host = GetRenderViewHost(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
916 const base::string16& WebContentsImpl::GetTitle() const { | 920 const base::string16& WebContentsImpl::GetTitle() const { |
917 // Transient entries take precedence. They are used for interstitial pages | 921 // Transient entries take precedence. They are used for interstitial pages |
918 // that are shown on top of existing pages. | 922 // that are shown on top of existing pages. |
919 NavigationEntry* entry = controller_.GetTransientEntry(); | 923 NavigationEntry* entry = controller_.GetTransientEntry(); |
920 std::string accept_languages = | 924 std::string accept_languages = |
921 GetContentClient()->browser()->GetAcceptLangs( | 925 GetContentClient()->browser()->GetAcceptLangs( |
922 GetBrowserContext()); | 926 GetBrowserContext()); |
923 if (entry) { | 927 if (entry) { |
924 return entry->GetTitleForDisplay(accept_languages); | 928 return entry->GetTitleForDisplay(accept_languages); |
925 } | 929 } |
926 WebUI* our_web_ui = GetRenderManager()->pending_web_ui() ? | 930 |
927 GetRenderManager()->pending_web_ui() : GetRenderManager()->web_ui(); | 931 WebUI* navigating_web_ui = GetRenderManager()->GetNavigatingWebUI(); |
| 932 WebUI* our_web_ui = navigating_web_ui |
| 933 ? navigating_web_ui |
| 934 : GetRenderManager()->current_frame_host()->web_ui(); |
| 935 |
928 if (our_web_ui) { | 936 if (our_web_ui) { |
929 // Don't override the title in view source mode. | 937 // Don't override the title in view source mode. |
930 entry = controller_.GetVisibleEntry(); | 938 entry = controller_.GetVisibleEntry(); |
931 if (!(entry && entry->IsViewSourceMode())) { | 939 if (!(entry && entry->IsViewSourceMode())) { |
932 // Give the Web UI the chance to override our title. | 940 // Give the Web UI the chance to override our title. |
933 const base::string16& title = our_web_ui->GetOverriddenTitle(); | 941 const base::string16& title = our_web_ui->GetOverriddenTitle(); |
934 if (!title.empty()) | 942 if (!title.empty()) |
935 return title; | 943 return title; |
936 } | 944 } |
937 } | 945 } |
(...skipping 2934 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3872 return; | 3880 return; |
3873 | 3881 |
3874 if (delegate_) | 3882 if (delegate_) |
3875 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); | 3883 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
3876 | 3884 |
3877 NotificationService::current()->Notify( | 3885 NotificationService::current()->Notify( |
3878 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, | 3886 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, |
3879 Source<WebContents>(this), | 3887 Source<WebContents>(this), |
3880 Details<RenderViewHost>(render_view_host)); | 3888 Details<RenderViewHost>(render_view_host)); |
3881 | 3889 |
3882 // When we're creating views, we're still doing initial setup, so we always | |
3883 // use the pending Web UI rather than any possibly existing committed one. | |
3884 if (GetRenderManager()->pending_web_ui()) | |
3885 GetRenderManager()->pending_web_ui()->RenderViewCreated(render_view_host); | |
3886 | |
3887 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | |
3888 switches::kEnableBrowserSideNavigation) && | |
3889 GetRenderManager()->speculative_web_ui()) { | |
3890 GetRenderManager()->speculative_web_ui()->RenderViewCreated( | |
3891 render_view_host); | |
3892 } | |
3893 | |
3894 NavigationEntry* entry = controller_.GetPendingEntry(); | 3890 NavigationEntry* entry = controller_.GetPendingEntry(); |
3895 if (entry && entry->IsViewSourceMode()) { | 3891 if (entry && entry->IsViewSourceMode()) { |
3896 // Put the renderer in view source mode. | 3892 // Put the renderer in view source mode. |
3897 render_view_host->Send( | 3893 render_view_host->Send( |
3898 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); | 3894 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); |
3899 } | 3895 } |
3900 | 3896 |
3901 view_->RenderViewCreated(render_view_host); | 3897 view_->RenderViewCreated(render_view_host); |
3902 | 3898 |
3903 FOR_EACH_OBSERVER( | 3899 FOR_EACH_OBSERVER( |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4298 source_id); | 4294 source_id); |
4299 } | 4295 } |
4300 | 4296 |
4301 int WebContentsImpl::CreateSwappedOutRenderView( | 4297 int WebContentsImpl::CreateSwappedOutRenderView( |
4302 SiteInstance* instance) { | 4298 SiteInstance* instance) { |
4303 int render_view_routing_id = MSG_ROUTING_NONE; | 4299 int render_view_routing_id = MSG_ROUTING_NONE; |
4304 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { | 4300 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
4305 GetRenderManager()->CreateRenderFrameProxy(instance); | 4301 GetRenderManager()->CreateRenderFrameProxy(instance); |
4306 } else { | 4302 } else { |
4307 GetRenderManager()->CreateRenderFrame( | 4303 GetRenderManager()->CreateRenderFrame( |
4308 instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, | 4304 instance, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, |
4309 &render_view_routing_id); | 4305 &render_view_routing_id); |
4310 } | 4306 } |
4311 return render_view_routing_id; | 4307 return render_view_routing_id; |
4312 } | 4308 } |
4313 | 4309 |
4314 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) { | 4310 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) { |
4315 if (render_widget_host != GetRenderViewHost()->GetWidget()) | 4311 if (render_widget_host != GetRenderViewHost()->GetWidget()) |
4316 return; | 4312 return; |
4317 | 4313 |
4318 // Notify observers. | 4314 // Notify observers. |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4472 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager( | 4468 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager( |
4473 RenderViewHost* old_host, | 4469 RenderViewHost* old_host, |
4474 RenderViewHost* new_host) { | 4470 RenderViewHost* new_host) { |
4475 NotifyViewSwapped(old_host, new_host); | 4471 NotifyViewSwapped(old_host, new_host); |
4476 } | 4472 } |
4477 | 4473 |
4478 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { | 4474 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { |
4479 return GetController(); | 4475 return GetController(); |
4480 } | 4476 } |
4481 | 4477 |
4482 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager( | 4478 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderFrameHost( |
4483 const GURL& url) { | 4479 const GURL& url) { |
4484 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( | 4480 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( |
4485 url, std::string()))); | 4481 url, std::string()))); |
4486 } | 4482 } |
4487 | 4483 |
4488 NavigationEntry* | 4484 NavigationEntry* |
4489 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { | 4485 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { |
4490 return controller_.GetLastCommittedEntry(); | 4486 return controller_.GetLastCommittedEntry(); |
4491 } | 4487 } |
4492 | 4488 |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4789 return NULL; | 4785 return NULL; |
4790 } | 4786 } |
4791 | 4787 |
4792 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { | 4788 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { |
4793 force_disable_overscroll_content_ = force_disable; | 4789 force_disable_overscroll_content_ = force_disable; |
4794 if (view_) | 4790 if (view_) |
4795 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); | 4791 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
4796 } | 4792 } |
4797 | 4793 |
4798 } // namespace content | 4794 } // namespace content |
OLD | NEW |