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