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 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 WebContentsImpl::~WebContentsImpl() { | 417 WebContentsImpl::~WebContentsImpl() { |
418 is_being_destroyed_ = true; | 418 is_being_destroyed_ = true; |
419 | 419 |
420 rwh_input_event_router_.reset(); | 420 rwh_input_event_router_.reset(); |
421 | 421 |
422 // Delete all RFH pending shutdown, which will lead the corresponding RVH to | 422 // Delete all RFH pending shutdown, which will lead the corresponding RVH to |
423 // shutdown and be deleted as well. | 423 // shutdown and be deleted as well. |
424 frame_tree_.ForEach( | 424 frame_tree_.ForEach( |
425 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown)); | 425 base::Bind(&RenderFrameHostManager::ClearRFHsPendingShutdown)); |
426 | 426 |
427 // Destroy all WebUI instances. | |
428 frame_tree_.ForEach(base::Bind(&RenderFrameHostManager::ClearWebUIInstances)); | |
429 | |
430 ClearAllPowerSaveBlockers(); | 427 ClearAllPowerSaveBlockers(); |
431 | 428 |
432 for (std::set<RenderWidgetHostImpl*>::iterator iter = | 429 for (std::set<RenderWidgetHostImpl*>::iterator iter = |
433 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { | 430 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { |
434 (*iter)->DetachDelegate(); | 431 (*iter)->DetachDelegate(); |
435 } | 432 } |
436 created_widgets_.clear(); | 433 created_widgets_.clear(); |
437 | 434 |
438 // Clear out any JavaScript state. | 435 // Clear out any JavaScript state. |
439 if (dialog_manager_) | 436 if (dialog_manager_) |
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 GetMainFrame()->RequestAXTreeSnapshot(callback); | 839 GetMainFrame()->RequestAXTreeSnapshot(callback); |
843 } | 840 } |
844 | 841 |
845 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url, | 842 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url, |
846 const std::string& frame_name) { | 843 const std::string& frame_name) { |
847 DCHECK(!frame_name.empty()); | 844 DCHECK(!frame_name.empty()); |
848 return CreateWebUI(url, frame_name); | 845 return CreateWebUI(url, frame_name); |
849 } | 846 } |
850 | 847 |
851 WebUI* WebContentsImpl::GetWebUI() const { | 848 WebUI* WebContentsImpl::GetWebUI() const { |
852 WebUI* commited_web_ui = GetCommittedWebUI(); | 849 return GetRenderManager()->web_ui() ? GetRenderManager()->web_ui() |
853 return commited_web_ui ? commited_web_ui | 850 : GetRenderManager()->pending_web_ui(); |
854 : GetRenderManager()->GetNavigatingWebUI(); | |
855 } | 851 } |
856 | 852 |
857 WebUI* WebContentsImpl::GetCommittedWebUI() const { | 853 WebUI* WebContentsImpl::GetCommittedWebUI() const { |
858 return frame_tree_.root()->current_frame_host()->web_ui(); | 854 return GetRenderManager()->web_ui(); |
859 } | 855 } |
860 | 856 |
861 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { | 857 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { |
862 if (GetUserAgentOverride() == override) | 858 if (GetUserAgentOverride() == override) |
863 return; | 859 return; |
864 | 860 |
865 renderer_preferences_.user_agent_override = override; | 861 renderer_preferences_.user_agent_override = override; |
866 | 862 |
867 // Send the new override string to the renderer. | 863 // Send the new override string to the renderer. |
868 RenderViewHost* host = GetRenderViewHost(); | 864 RenderViewHost* host = GetRenderViewHost(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
915 const base::string16& WebContentsImpl::GetTitle() const { | 911 const base::string16& WebContentsImpl::GetTitle() const { |
916 // Transient entries take precedence. They are used for interstitial pages | 912 // Transient entries take precedence. They are used for interstitial pages |
917 // that are shown on top of existing pages. | 913 // that are shown on top of existing pages. |
918 NavigationEntry* entry = controller_.GetTransientEntry(); | 914 NavigationEntry* entry = controller_.GetTransientEntry(); |
919 std::string accept_languages = | 915 std::string accept_languages = |
920 GetContentClient()->browser()->GetAcceptLangs( | 916 GetContentClient()->browser()->GetAcceptLangs( |
921 GetBrowserContext()); | 917 GetBrowserContext()); |
922 if (entry) { | 918 if (entry) { |
923 return entry->GetTitleForDisplay(accept_languages); | 919 return entry->GetTitleForDisplay(accept_languages); |
924 } | 920 } |
925 | 921 WebUI* our_web_ui = GetRenderManager()->pending_web_ui() ? |
926 WebUI* navigating_web_ui = GetRenderManager()->GetNavigatingWebUI(); | 922 GetRenderManager()->pending_web_ui() : GetRenderManager()->web_ui(); |
927 WebUI* our_web_ui = navigating_web_ui | |
928 ? navigating_web_ui | |
929 : GetRenderManager()->current_frame_host()->web_ui(); | |
930 | |
931 if (our_web_ui) { | 923 if (our_web_ui) { |
932 // Don't override the title in view source mode. | 924 // Don't override the title in view source mode. |
933 entry = controller_.GetVisibleEntry(); | 925 entry = controller_.GetVisibleEntry(); |
934 if (!(entry && entry->IsViewSourceMode())) { | 926 if (!(entry && entry->IsViewSourceMode())) { |
935 // Give the Web UI the chance to override our title. | 927 // Give the Web UI the chance to override our title. |
936 const base::string16& title = our_web_ui->GetOverriddenTitle(); | 928 const base::string16& title = our_web_ui->GetOverriddenTitle(); |
937 if (!title.empty()) | 929 if (!title.empty()) |
938 return title; | 930 return title; |
939 } | 931 } |
940 } | 932 } |
(...skipping 2914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3855 return; | 3847 return; |
3856 | 3848 |
3857 if (delegate_) | 3849 if (delegate_) |
3858 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); | 3850 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
3859 | 3851 |
3860 NotificationService::current()->Notify( | 3852 NotificationService::current()->Notify( |
3861 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, | 3853 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, |
3862 Source<WebContents>(this), | 3854 Source<WebContents>(this), |
3863 Details<RenderViewHost>(render_view_host)); | 3855 Details<RenderViewHost>(render_view_host)); |
3864 | 3856 |
| 3857 // When we're creating views, we're still doing initial setup, so we always |
| 3858 // use the pending Web UI rather than any possibly existing committed one. |
| 3859 if (GetRenderManager()->pending_web_ui()) |
| 3860 GetRenderManager()->pending_web_ui()->RenderViewCreated(render_view_host); |
| 3861 |
| 3862 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 3863 switches::kEnableBrowserSideNavigation) && |
| 3864 GetRenderManager()->speculative_web_ui()) { |
| 3865 GetRenderManager()->speculative_web_ui()->RenderViewCreated( |
| 3866 render_view_host); |
| 3867 } |
| 3868 |
3865 NavigationEntry* entry = controller_.GetPendingEntry(); | 3869 NavigationEntry* entry = controller_.GetPendingEntry(); |
3866 if (entry && entry->IsViewSourceMode()) { | 3870 if (entry && entry->IsViewSourceMode()) { |
3867 // Put the renderer in view source mode. | 3871 // Put the renderer in view source mode. |
3868 render_view_host->Send( | 3872 render_view_host->Send( |
3869 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); | 3873 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); |
3870 } | 3874 } |
3871 | 3875 |
3872 view_->RenderViewCreated(render_view_host); | 3876 view_->RenderViewCreated(render_view_host); |
3873 | 3877 |
3874 FOR_EACH_OBSERVER( | 3878 FOR_EACH_OBSERVER( |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4269 source_id); | 4273 source_id); |
4270 } | 4274 } |
4271 | 4275 |
4272 int WebContentsImpl::CreateSwappedOutRenderView( | 4276 int WebContentsImpl::CreateSwappedOutRenderView( |
4273 SiteInstance* instance) { | 4277 SiteInstance* instance) { |
4274 int render_view_routing_id = MSG_ROUTING_NONE; | 4278 int render_view_routing_id = MSG_ROUTING_NONE; |
4275 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { | 4279 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
4276 GetRenderManager()->CreateRenderFrameProxy(instance); | 4280 GetRenderManager()->CreateRenderFrameProxy(instance); |
4277 } else { | 4281 } else { |
4278 GetRenderManager()->CreateRenderFrame( | 4282 GetRenderManager()->CreateRenderFrame( |
4279 instance, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, | 4283 instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, |
4280 &render_view_routing_id); | 4284 &render_view_routing_id); |
4281 } | 4285 } |
4282 return render_view_routing_id; | 4286 return render_view_routing_id; |
4283 } | 4287 } |
4284 | 4288 |
4285 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) { | 4289 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) { |
4286 if (render_widget_host != GetRenderViewHost()->GetWidget()) | 4290 if (render_widget_host != GetRenderViewHost()->GetWidget()) |
4287 return; | 4291 return; |
4288 | 4292 |
4289 // Notify observers. | 4293 // Notify observers. |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4443 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager( | 4447 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager( |
4444 RenderViewHost* old_host, | 4448 RenderViewHost* old_host, |
4445 RenderViewHost* new_host) { | 4449 RenderViewHost* new_host) { |
4446 NotifyViewSwapped(old_host, new_host); | 4450 NotifyViewSwapped(old_host, new_host); |
4447 } | 4451 } |
4448 | 4452 |
4449 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { | 4453 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { |
4450 return GetController(); | 4454 return GetController(); |
4451 } | 4455 } |
4452 | 4456 |
4453 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderFrameHost( | 4457 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager( |
4454 const GURL& url) { | 4458 const GURL& url) { |
4455 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( | 4459 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( |
4456 url, std::string()))); | 4460 url, std::string()))); |
4457 } | 4461 } |
4458 | 4462 |
4459 NavigationEntry* | 4463 NavigationEntry* |
4460 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { | 4464 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { |
4461 return controller_.GetLastCommittedEntry(); | 4465 return controller_.GetLastCommittedEntry(); |
4462 } | 4466 } |
4463 | 4467 |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4760 return NULL; | 4764 return NULL; |
4761 } | 4765 } |
4762 | 4766 |
4763 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { | 4767 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { |
4764 force_disable_overscroll_content_ = force_disable; | 4768 force_disable_overscroll_content_ = force_disable; |
4765 if (view_) | 4769 if (view_) |
4766 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); | 4770 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
4767 } | 4771 } |
4768 | 4772 |
4769 } // namespace content | 4773 } // namespace content |
OLD | NEW |