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 2018 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2029 | 2029 |
2030 bool WebContentsImpl::Send(IPC::Message* message) { | 2030 bool WebContentsImpl::Send(IPC::Message* message) { |
2031 if (!GetRenderViewHost()) { | 2031 if (!GetRenderViewHost()) { |
2032 delete message; | 2032 delete message; |
2033 return false; | 2033 return false; |
2034 } | 2034 } |
2035 | 2035 |
2036 return GetRenderViewHost()->Send(message); | 2036 return GetRenderViewHost()->Send(message); |
2037 } | 2037 } |
2038 | 2038 |
2039 bool WebContentsImpl::NavigateToPendingEntry( | |
2040 NavigationController::ReloadType reload_type) { | |
2041 FrameTreeNode* node = frame_tree_.root(); | |
2042 | |
2043 // Navigate in the FrameTreeNode specified in the pending entry, if any. This | |
2044 // is currently only used in --site-per-process and tests. | |
2045 // TODO(creis): Remove this method and NavigationEntryImpl::frame_tree_node_id | |
2046 // by using FrameNavigationEntries instead. See https://crbug.com/236848. | |
2047 NavigationEntryImpl* pending_entry = controller_.GetPendingEntry(); | |
2048 if (pending_entry->frame_tree_node_id() != -1) { | |
2049 FrameTreeNode* subframe = | |
2050 frame_tree_.FindByID(pending_entry->frame_tree_node_id()); | |
2051 DCHECK(subframe); | |
2052 if (subframe) | |
2053 node = subframe; | |
2054 } | |
2055 | |
2056 return node->navigator()->NavigateToPendingEntry(node, reload_type); | |
2057 } | |
2058 | |
2059 void WebContentsImpl::RenderFrameForInterstitialPageCreated( | 2039 void WebContentsImpl::RenderFrameForInterstitialPageCreated( |
2060 RenderFrameHost* render_frame_host) { | 2040 RenderFrameHost* render_frame_host) { |
2061 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 2041 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
2062 RenderFrameForInterstitialPageCreated(render_frame_host)); | 2042 RenderFrameForInterstitialPageCreated(render_frame_host)); |
2063 } | 2043 } |
2064 | 2044 |
2065 void WebContentsImpl::AttachInterstitialPage( | 2045 void WebContentsImpl::AttachInterstitialPage( |
2066 InterstitialPageImpl* interstitial_page) { | 2046 InterstitialPageImpl* interstitial_page) { |
2067 DCHECK(interstitial_page); | 2047 DCHECK(interstitial_page); |
2068 GetRenderManager()->set_interstitial_page(interstitial_page); | 2048 GetRenderManager()->set_interstitial_page(interstitial_page); |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2624 if (entry && entry->GetURL() == GURL(url::kAboutBlankURL)) | 2604 if (entry && entry->GetURL() == GURL(url::kAboutBlankURL)) |
2625 return true; | 2605 return true; |
2626 return delegate_ && delegate_->ShouldFocusLocationBarByDefault(this); | 2606 return delegate_ && delegate_->ShouldFocusLocationBarByDefault(this); |
2627 } | 2607 } |
2628 | 2608 |
2629 void WebContentsImpl::SetFocusToLocationBar(bool select_all) { | 2609 void WebContentsImpl::SetFocusToLocationBar(bool select_all) { |
2630 if (delegate_) | 2610 if (delegate_) |
2631 delegate_->SetFocusToLocationBar(select_all); | 2611 delegate_->SetFocusToLocationBar(select_all); |
2632 } | 2612 } |
2633 | 2613 |
| 2614 FrameTreeNode* WebContentsImpl::GetFrameTreeRoot() { |
| 2615 return frame_tree_.root(); |
| 2616 } |
| 2617 |
2634 void WebContentsImpl::DidStartProvisionalLoad( | 2618 void WebContentsImpl::DidStartProvisionalLoad( |
2635 RenderFrameHostImpl* render_frame_host, | 2619 RenderFrameHostImpl* render_frame_host, |
2636 const GURL& validated_url, | 2620 const GURL& validated_url, |
2637 bool is_error_page, | 2621 bool is_error_page, |
2638 bool is_iframe_srcdoc) { | 2622 bool is_iframe_srcdoc) { |
2639 // Notify observers about the start of the provisional load. | 2623 // Notify observers about the start of the provisional load. |
2640 FOR_EACH_OBSERVER( | 2624 FOR_EACH_OBSERVER( |
2641 WebContentsObserver, | 2625 WebContentsObserver, |
2642 observers_, | 2626 observers_, |
2643 DidStartProvisionalLoadForFrame( | 2627 DidStartProvisionalLoadForFrame( |
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3861 // have FrameNavigationEntries. Once we do, this should be a DCHECK. | 3845 // have FrameNavigationEntries. Once we do, this should be a DCHECK. |
3862 if (rvh->GetDelegate()->GetAsWebContents() != this) | 3846 if (rvh->GetDelegate()->GetAsWebContents() != this) |
3863 return; | 3847 return; |
3864 | 3848 |
3865 // We must be prepared to handle state updates for any page, these occur | 3849 // We must be prepared to handle state updates for any page, these occur |
3866 // when the user is scrolling and entering form data, as well as when we're | 3850 // when the user is scrolling and entering form data, as well as when we're |
3867 // leaving a page, in which case our state may have already been moved to | 3851 // leaving a page, in which case our state may have already been moved to |
3868 // the next page. The navigation controller will look up the appropriate | 3852 // the next page. The navigation controller will look up the appropriate |
3869 // NavigationEntry and update it when it is notified via the delegate. | 3853 // NavigationEntry and update it when it is notified via the delegate. |
3870 | 3854 |
3871 int entry_index = controller_.GetEntryIndexWithPageID( | 3855 int entry_index = controller_.GetEntryIndexWithPageID(page_id); |
3872 rvh->GetSiteInstance(), page_id); | |
3873 if (entry_index < 0) | 3856 if (entry_index < 0) |
3874 return; | 3857 return; |
3875 NavigationEntry* entry = controller_.GetEntryAtIndex(entry_index); | 3858 NavigationEntry* entry = controller_.GetEntryAtIndex(entry_index); |
3876 | 3859 |
3877 if (page_state == entry->GetPageState()) | 3860 if (page_state == entry->GetPageState()) |
3878 return; // Nothing to update. | 3861 return; // Nothing to update. |
3879 entry->SetPageState(page_state); | 3862 entry->SetPageState(page_state); |
3880 controller_.NotifyEntryChanged(entry, entry_index); | 3863 controller_.NotifyEntryChanged(entry, entry_index); |
3881 } | 3864 } |
3882 | 3865 |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4038 const base::string16& title, | 4021 const base::string16& title, |
4039 base::i18n::TextDirection title_direction) { | 4022 base::i18n::TextDirection title_direction) { |
4040 RenderViewHost* rvh = render_frame_host->GetRenderViewHost(); | 4023 RenderViewHost* rvh = render_frame_host->GetRenderViewHost(); |
4041 | 4024 |
4042 // If we have a title, that's a pretty good indication that we've started | 4025 // If we have a title, that's a pretty good indication that we've started |
4043 // getting useful data. | 4026 // getting useful data. |
4044 SetNotWaitingForResponse(); | 4027 SetNotWaitingForResponse(); |
4045 | 4028 |
4046 // Try to find the navigation entry, which might not be the current one. | 4029 // Try to find the navigation entry, which might not be the current one. |
4047 // For example, it might be from a pending RVH for the pending entry. | 4030 // For example, it might be from a pending RVH for the pending entry. |
4048 NavigationEntryImpl* entry = controller_.GetEntryWithPageID( | 4031 NavigationEntryImpl* entry = controller_.GetEntryWithPageID(page_id); |
4049 rvh->GetSiteInstance(), page_id); | |
4050 | 4032 |
4051 // We can handle title updates when we don't have an entry in | 4033 // We can handle title updates when we don't have an entry in |
4052 // UpdateTitleForEntry, but only if the update is from the current RVH. | 4034 // UpdateTitleForEntry, but only if the update is from the current RVH. |
4053 // TODO(avi): Change to make decisions based on the RenderFrameHost. | 4035 // TODO(avi): Change to make decisions based on the RenderFrameHost. |
4054 if (!entry && rvh != GetRenderViewHost()) | 4036 if (!entry && rvh != GetRenderViewHost()) |
4055 return; | 4037 return; |
4056 | 4038 |
4057 // TODO(evan): make use of title_direction. | 4039 // TODO(evan): make use of title_direction. |
4058 // http://code.google.com/p/chromium/issues/detail?id=27094 | 4040 // http://code.google.com/p/chromium/issues/detail?id=27094 |
4059 if (!UpdateTitleForEntry(entry, title)) | 4041 if (!UpdateTitleForEntry(entry, title)) |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4647 node->render_manager()->ResumeResponseDeferredAtStart(); | 4629 node->render_manager()->ResumeResponseDeferredAtStart(); |
4648 } | 4630 } |
4649 | 4631 |
4650 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { | 4632 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { |
4651 force_disable_overscroll_content_ = force_disable; | 4633 force_disable_overscroll_content_ = force_disable; |
4652 if (view_) | 4634 if (view_) |
4653 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); | 4635 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
4654 } | 4636 } |
4655 | 4637 |
4656 } // namespace content | 4638 } // namespace content |
OLD | NEW |