Chromium Code Reviews| 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 | |
| 427 ClearAllPowerSaveBlockers(); | 430 ClearAllPowerSaveBlockers(); |
| 428 | 431 |
| 429 for (std::set<RenderWidgetHostImpl*>::iterator iter = | 432 for (std::set<RenderWidgetHostImpl*>::iterator iter = |
| 430 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { | 433 created_widgets_.begin(); iter != created_widgets_.end(); ++iter) { |
| 431 (*iter)->DetachDelegate(); | 434 (*iter)->DetachDelegate(); |
| 432 } | 435 } |
| 433 created_widgets_.clear(); | 436 created_widgets_.clear(); |
| 434 | 437 |
| 435 // Clear out any JavaScript state. | 438 // Clear out any JavaScript state. |
| 436 if (dialog_manager_) | 439 if (dialog_manager_) |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 839 GetMainFrame()->RequestAXTreeSnapshot(callback); | 842 GetMainFrame()->RequestAXTreeSnapshot(callback); |
| 840 } | 843 } |
| 841 | 844 |
| 842 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url, | 845 WebUI* WebContentsImpl::CreateSubframeWebUI(const GURL& url, |
| 843 const std::string& frame_name) { | 846 const std::string& frame_name) { |
| 844 DCHECK(!frame_name.empty()); | 847 DCHECK(!frame_name.empty()); |
| 845 return CreateWebUI(url, frame_name); | 848 return CreateWebUI(url, frame_name); |
| 846 } | 849 } |
| 847 | 850 |
| 848 WebUI* WebContentsImpl::GetWebUI() const { | 851 WebUI* WebContentsImpl::GetWebUI() const { |
| 849 return GetRenderManager()->web_ui() ? GetRenderManager()->web_ui() | 852 return GetCommittedWebUI() ? GetCommittedWebUI() |
|
nasko
2015/11/18 23:48:04
nit: Why not assign it to WebUI* and avoid the two
carlosk
2015/11/19 16:49:14
Done.
| |
| 850 : GetRenderManager()->pending_web_ui(); | 853 : GetRenderManager()->GetNavigatingWebUI(); |
| 851 } | 854 } |
| 852 | 855 |
| 853 WebUI* WebContentsImpl::GetCommittedWebUI() const { | 856 WebUI* WebContentsImpl::GetCommittedWebUI() const { |
| 854 return GetRenderManager()->web_ui(); | 857 return frame_tree_.root()->current_frame_host()->web_ui(); |
| 855 } | 858 } |
| 856 | 859 |
| 857 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { | 860 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { |
| 858 if (GetUserAgentOverride() == override) | 861 if (GetUserAgentOverride() == override) |
| 859 return; | 862 return; |
| 860 | 863 |
| 861 renderer_preferences_.user_agent_override = override; | 864 renderer_preferences_.user_agent_override = override; |
| 862 | 865 |
| 863 // Send the new override string to the renderer. | 866 // Send the new override string to the renderer. |
| 864 RenderViewHost* host = GetRenderViewHost(); | 867 RenderViewHost* host = GetRenderViewHost(); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 911 const base::string16& WebContentsImpl::GetTitle() const { | 914 const base::string16& WebContentsImpl::GetTitle() const { |
| 912 // Transient entries take precedence. They are used for interstitial pages | 915 // Transient entries take precedence. They are used for interstitial pages |
| 913 // that are shown on top of existing pages. | 916 // that are shown on top of existing pages. |
| 914 NavigationEntry* entry = controller_.GetTransientEntry(); | 917 NavigationEntry* entry = controller_.GetTransientEntry(); |
| 915 std::string accept_languages = | 918 std::string accept_languages = |
| 916 GetContentClient()->browser()->GetAcceptLangs( | 919 GetContentClient()->browser()->GetAcceptLangs( |
| 917 GetBrowserContext()); | 920 GetBrowserContext()); |
| 918 if (entry) { | 921 if (entry) { |
| 919 return entry->GetTitleForDisplay(accept_languages); | 922 return entry->GetTitleForDisplay(accept_languages); |
| 920 } | 923 } |
| 921 WebUI* our_web_ui = GetRenderManager()->pending_web_ui() ? | 924 |
| 922 GetRenderManager()->pending_web_ui() : GetRenderManager()->web_ui(); | 925 WebUI* our_web_ui = GetRenderManager()->GetNavigatingWebUI() |
| 926 ? GetRenderManager()->GetNavigatingWebUI() | |
| 927 : GetRenderManager()->current_frame_host()->web_ui(); | |
|
nasko
2015/11/18 23:48:04
Same as above.
carlosk
2015/11/19 16:49:14
Done.
| |
| 928 | |
| 923 if (our_web_ui) { | 929 if (our_web_ui) { |
| 924 // Don't override the title in view source mode. | 930 // Don't override the title in view source mode. |
| 925 entry = controller_.GetVisibleEntry(); | 931 entry = controller_.GetVisibleEntry(); |
| 926 if (!(entry && entry->IsViewSourceMode())) { | 932 if (!(entry && entry->IsViewSourceMode())) { |
| 927 // Give the Web UI the chance to override our title. | 933 // Give the Web UI the chance to override our title. |
| 928 const base::string16& title = our_web_ui->GetOverriddenTitle(); | 934 const base::string16& title = our_web_ui->GetOverriddenTitle(); |
| 929 if (!title.empty()) | 935 if (!title.empty()) |
| 930 return title; | 936 return title; |
| 931 } | 937 } |
| 932 } | 938 } |
| (...skipping 2914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3847 return; | 3853 return; |
| 3848 | 3854 |
| 3849 if (delegate_) | 3855 if (delegate_) |
| 3850 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); | 3856 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
| 3851 | 3857 |
| 3852 NotificationService::current()->Notify( | 3858 NotificationService::current()->Notify( |
| 3853 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, | 3859 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, |
| 3854 Source<WebContents>(this), | 3860 Source<WebContents>(this), |
| 3855 Details<RenderViewHost>(render_view_host)); | 3861 Details<RenderViewHost>(render_view_host)); |
| 3856 | 3862 |
| 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 | |
| 3869 NavigationEntry* entry = controller_.GetPendingEntry(); | 3863 NavigationEntry* entry = controller_.GetPendingEntry(); |
| 3870 if (entry && entry->IsViewSourceMode()) { | 3864 if (entry && entry->IsViewSourceMode()) { |
| 3871 // Put the renderer in view source mode. | 3865 // Put the renderer in view source mode. |
| 3872 render_view_host->Send( | 3866 render_view_host->Send( |
| 3873 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); | 3867 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); |
| 3874 } | 3868 } |
| 3875 | 3869 |
| 3876 view_->RenderViewCreated(render_view_host); | 3870 view_->RenderViewCreated(render_view_host); |
| 3877 | 3871 |
| 3878 FOR_EACH_OBSERVER( | 3872 FOR_EACH_OBSERVER( |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4273 source_id); | 4267 source_id); |
| 4274 } | 4268 } |
| 4275 | 4269 |
| 4276 int WebContentsImpl::CreateSwappedOutRenderView( | 4270 int WebContentsImpl::CreateSwappedOutRenderView( |
| 4277 SiteInstance* instance) { | 4271 SiteInstance* instance) { |
| 4278 int render_view_routing_id = MSG_ROUTING_NONE; | 4272 int render_view_routing_id = MSG_ROUTING_NONE; |
| 4279 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { | 4273 if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
| 4280 GetRenderManager()->CreateRenderFrameProxy(instance); | 4274 GetRenderManager()->CreateRenderFrameProxy(instance); |
| 4281 } else { | 4275 } else { |
| 4282 GetRenderManager()->CreateRenderFrame( | 4276 GetRenderManager()->CreateRenderFrame( |
| 4283 instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, | 4277 instance, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, |
| 4284 &render_view_routing_id); | 4278 &render_view_routing_id); |
| 4285 } | 4279 } |
| 4286 return render_view_routing_id; | 4280 return render_view_routing_id; |
| 4287 } | 4281 } |
| 4288 | 4282 |
| 4289 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) { | 4283 void WebContentsImpl::OnUserGesture(RenderWidgetHostImpl* render_widget_host) { |
| 4290 if (render_widget_host != GetRenderViewHost()->GetWidget()) | 4284 if (render_widget_host != GetRenderViewHost()->GetWidget()) |
| 4291 return; | 4285 return; |
| 4292 | 4286 |
| 4293 // Notify observers. | 4287 // Notify observers. |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4447 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager( | 4441 void WebContentsImpl::NotifyMainFrameSwappedFromRenderManager( |
| 4448 RenderViewHost* old_host, | 4442 RenderViewHost* old_host, |
| 4449 RenderViewHost* new_host) { | 4443 RenderViewHost* new_host) { |
| 4450 NotifyViewSwapped(old_host, new_host); | 4444 NotifyViewSwapped(old_host, new_host); |
| 4451 } | 4445 } |
| 4452 | 4446 |
| 4453 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { | 4447 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { |
| 4454 return GetController(); | 4448 return GetController(); |
| 4455 } | 4449 } |
| 4456 | 4450 |
| 4457 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderManager( | 4451 scoped_ptr<WebUIImpl> WebContentsImpl::CreateWebUIForRenderFrameHost( |
| 4458 const GURL& url) { | 4452 const GURL& url) { |
| 4459 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( | 4453 return scoped_ptr<WebUIImpl>(static_cast<WebUIImpl*>(CreateWebUI( |
| 4460 url, std::string()))); | 4454 url, std::string()))); |
| 4461 } | 4455 } |
| 4462 | 4456 |
| 4463 NavigationEntry* | 4457 NavigationEntry* |
| 4464 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { | 4458 WebContentsImpl::GetLastCommittedNavigationEntryForRenderManager() { |
| 4465 return controller_.GetLastCommittedEntry(); | 4459 return controller_.GetLastCommittedEntry(); |
| 4466 } | 4460 } |
| 4467 | 4461 |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4764 return NULL; | 4758 return NULL; |
| 4765 } | 4759 } |
| 4766 | 4760 |
| 4767 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { | 4761 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { |
| 4768 force_disable_overscroll_content_ = force_disable; | 4762 force_disable_overscroll_content_ = force_disable; |
| 4769 if (view_) | 4763 if (view_) |
| 4770 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); | 4764 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
| 4771 } | 4765 } |
| 4772 | 4766 |
| 4773 } // namespace content | 4767 } // namespace content |
| OLD | NEW |