| 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/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 | 903 |
| 904 renderer_preferences_.user_agent_override = override; | 904 renderer_preferences_.user_agent_override = override; |
| 905 | 905 |
| 906 // Send the new override string to the renderer. | 906 // Send the new override string to the renderer. |
| 907 RenderViewHost* host = GetRenderViewHost(); | 907 RenderViewHost* host = GetRenderViewHost(); |
| 908 if (host) | 908 if (host) |
| 909 host->SyncRendererPrefs(); | 909 host->SyncRendererPrefs(); |
| 910 | 910 |
| 911 // Reload the page if a load is currently in progress to avoid having | 911 // Reload the page if a load is currently in progress to avoid having |
| 912 // different parts of the page loaded using different user agents. | 912 // different parts of the page loaded using different user agents. |
| 913 NavigationEntry* entry = controller_.GetActiveEntry(); | 913 NavigationEntry* entry = controller_.GetVisibleEntry(); |
| 914 if (is_loading_ && entry != NULL && entry->GetIsOverridingUserAgent()) | 914 if (is_loading_ && entry != NULL && entry->GetIsOverridingUserAgent()) |
| 915 controller_.ReloadIgnoringCache(true); | 915 controller_.ReloadIgnoringCache(true); |
| 916 | 916 |
| 917 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 917 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 918 UserAgentOverrideSet(override)); | 918 UserAgentOverrideSet(override)); |
| 919 } | 919 } |
| 920 | 920 |
| 921 const std::string& WebContentsImpl::GetUserAgentOverride() const { | 921 const std::string& WebContentsImpl::GetUserAgentOverride() const { |
| 922 return renderer_preferences_.user_agent_override; | 922 return renderer_preferences_.user_agent_override; |
| 923 } | 923 } |
| (...skipping 1034 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1958 if (!GetURL().is_valid()) | 1958 if (!GetURL().is_valid()) |
| 1959 return; | 1959 return; |
| 1960 bool is_main_frame = (url == GetURL()); | 1960 bool is_main_frame = (url == GetURL()); |
| 1961 | 1961 |
| 1962 DownloadManager* dlm = | 1962 DownloadManager* dlm = |
| 1963 BrowserContext::GetDownloadManager(GetBrowserContext()); | 1963 BrowserContext::GetDownloadManager(GetBrowserContext()); |
| 1964 if (!dlm) | 1964 if (!dlm) |
| 1965 return; | 1965 return; |
| 1966 int64 post_id = -1; | 1966 int64 post_id = -1; |
| 1967 if (is_main_frame) { | 1967 if (is_main_frame) { |
| 1968 const NavigationEntry* entry = controller_.GetActiveEntry(); | 1968 const NavigationEntry* entry = controller_.GetLastCommittedEntry(); |
| 1969 if (entry) | 1969 if (entry) |
| 1970 post_id = entry->GetPostID(); | 1970 post_id = entry->GetPostID(); |
| 1971 } | 1971 } |
| 1972 scoped_ptr<DownloadUrlParameters> params( | 1972 scoped_ptr<DownloadUrlParameters> params( |
| 1973 DownloadUrlParameters::FromWebContents(this, url)); | 1973 DownloadUrlParameters::FromWebContents(this, url)); |
| 1974 params->set_referrer(referrer); | 1974 params->set_referrer(referrer); |
| 1975 params->set_post_id(post_id); | 1975 params->set_post_id(post_id); |
| 1976 params->set_prefer_cache(true); | 1976 params->set_prefer_cache(true); |
| 1977 if (post_id >= 0) | 1977 if (post_id >= 0) |
| 1978 params->set_method("POST"); | 1978 params->set_method("POST"); |
| 1979 params->set_prompt(true); | 1979 params->set_prompt(true); |
| 1980 dlm->DownloadUrl(params.Pass()); | 1980 dlm->DownloadUrl(params.Pass()); |
| 1981 } | 1981 } |
| 1982 | 1982 |
| 1983 void WebContentsImpl::GenerateMHTML( | 1983 void WebContentsImpl::GenerateMHTML( |
| 1984 const base::FilePath& file, | 1984 const base::FilePath& file, |
| 1985 const base::Callback<void(int64)>& callback) { | 1985 const base::Callback<void(int64)>& callback) { |
| 1986 MHTMLGenerationManager::GetInstance()->SaveMHTML(this, file, callback); | 1986 MHTMLGenerationManager::GetInstance()->SaveMHTML(this, file, callback); |
| 1987 } | 1987 } |
| 1988 | 1988 |
| 1989 // TODO(nasko): Rename this method to IsVisibleEntry. |
| 1989 bool WebContentsImpl::IsActiveEntry(int32 page_id) { | 1990 bool WebContentsImpl::IsActiveEntry(int32 page_id) { |
| 1990 NavigationEntryImpl* active_entry = | 1991 NavigationEntryImpl* visible_entry = |
| 1991 NavigationEntryImpl::FromNavigationEntry(controller_.GetActiveEntry()); | 1992 NavigationEntryImpl::FromNavigationEntry(controller_.GetVisibleEntry()); |
| 1992 return (active_entry != NULL && | 1993 return (visible_entry != NULL && |
| 1993 active_entry->site_instance() == GetSiteInstance() && | 1994 visible_entry->site_instance() == GetSiteInstance() && |
| 1994 active_entry->GetPageID() == page_id); | 1995 visible_entry->GetPageID() == page_id); |
| 1995 } | 1996 } |
| 1996 | 1997 |
| 1997 const std::string& WebContentsImpl::GetContentsMimeType() const { | 1998 const std::string& WebContentsImpl::GetContentsMimeType() const { |
| 1998 return contents_mime_type_; | 1999 return contents_mime_type_; |
| 1999 } | 2000 } |
| 2000 | 2001 |
| 2001 bool WebContentsImpl::WillNotifyDisconnection() const { | 2002 bool WebContentsImpl::WillNotifyDisconnection() const { |
| 2002 return notify_disconnection_; | 2003 return notify_disconnection_; |
| 2003 } | 2004 } |
| 2004 | 2005 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2066 HostZoomMap::GetForBrowserContext(GetBrowserContext())); | 2067 HostZoomMap::GetForBrowserContext(GetBrowserContext())); |
| 2067 if (!zoom_map) | 2068 if (!zoom_map) |
| 2068 return 0; | 2069 return 0; |
| 2069 | 2070 |
| 2070 double zoom_level; | 2071 double zoom_level; |
| 2071 if (temporary_zoom_settings_) { | 2072 if (temporary_zoom_settings_) { |
| 2072 zoom_level = zoom_map->GetTemporaryZoomLevel( | 2073 zoom_level = zoom_map->GetTemporaryZoomLevel( |
| 2073 GetRenderProcessHost()->GetID(), GetRenderViewHost()->GetRoutingID()); | 2074 GetRenderProcessHost()->GetID(), GetRenderViewHost()->GetRoutingID()); |
| 2074 } else { | 2075 } else { |
| 2075 GURL url; | 2076 GURL url; |
| 2076 NavigationEntry* active_entry = GetController().GetActiveEntry(); | 2077 NavigationEntry* entry = GetController().GetLastCommittedEntry(); |
| 2077 // Since zoom map is updated using rewritten URL, use rewritten URL | 2078 // Since zoom map is updated using rewritten URL, use rewritten URL |
| 2078 // to get the zoom level. | 2079 // to get the zoom level. |
| 2079 url = active_entry ? active_entry->GetURL() : GURL::EmptyGURL(); | 2080 url = entry ? entry->GetURL() : GURL::EmptyGURL(); |
| 2080 zoom_level = zoom_map->GetZoomLevelForHostAndScheme(url.scheme(), | 2081 zoom_level = zoom_map->GetZoomLevelForHostAndScheme(url.scheme(), |
| 2081 net::GetHostOrSpecFromURL(url)); | 2082 net::GetHostOrSpecFromURL(url)); |
| 2082 } | 2083 } |
| 2083 return zoom_level; | 2084 return zoom_level; |
| 2084 } | 2085 } |
| 2085 | 2086 |
| 2086 int WebContentsImpl::GetZoomPercent(bool* enable_increment, | 2087 int WebContentsImpl::GetZoomPercent(bool* enable_increment, |
| 2087 bool* enable_decrement) const { | 2088 bool* enable_decrement) const { |
| 2088 *enable_decrement = *enable_increment = false; | 2089 *enable_decrement = *enable_increment = false; |
| 2089 // Calculate the zoom percent from the factor. Round up to the nearest whole | 2090 // Calculate the zoom percent from the factor. Round up to the nearest whole |
| 2090 // number. | 2091 // number. |
| 2091 int percent = static_cast<int>( | 2092 int percent = static_cast<int>( |
| 2092 ZoomLevelToZoomFactor(GetZoomLevel()) * 100 + 0.5); | 2093 ZoomLevelToZoomFactor(GetZoomLevel()) * 100 + 0.5); |
| 2093 *enable_decrement = percent > minimum_zoom_percent_; | 2094 *enable_decrement = percent > minimum_zoom_percent_; |
| 2094 *enable_increment = percent < maximum_zoom_percent_; | 2095 *enable_increment = percent < maximum_zoom_percent_; |
| 2095 return percent; | 2096 return percent; |
| 2096 } | 2097 } |
| 2097 | 2098 |
| 2098 void WebContentsImpl::ViewSource() { | 2099 void WebContentsImpl::ViewSource() { |
| 2099 if (!delegate_) | 2100 if (!delegate_) |
| 2100 return; | 2101 return; |
| 2101 | 2102 |
| 2102 NavigationEntry* active_entry = GetController().GetActiveEntry(); | 2103 NavigationEntry* entry = GetController().GetLastCommittedEntry(); |
| 2103 if (!active_entry) | 2104 if (!entry) |
| 2104 return; | 2105 return; |
| 2105 | 2106 |
| 2106 delegate_->ViewSourceForTab(this, active_entry->GetURL()); | 2107 delegate_->ViewSourceForTab(this, entry->GetURL()); |
| 2107 } | 2108 } |
| 2108 | 2109 |
| 2109 void WebContentsImpl::ViewFrameSource(const GURL& url, | 2110 void WebContentsImpl::ViewFrameSource(const GURL& url, |
| 2110 const PageState& page_state) { | 2111 const PageState& page_state) { |
| 2111 if (!delegate_) | 2112 if (!delegate_) |
| 2112 return; | 2113 return; |
| 2113 | 2114 |
| 2114 delegate_->ViewSourceForFrame(this, url, page_state); | 2115 delegate_->ViewSourceForFrame(this, url, page_state); |
| 2115 } | 2116 } |
| 2116 | 2117 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2151 bool is_favicon, | 2152 bool is_favicon, |
| 2152 uint32_t max_bitmap_size, | 2153 uint32_t max_bitmap_size, |
| 2153 const ImageDownloadCallback& callback) { | 2154 const ImageDownloadCallback& callback) { |
| 2154 RenderViewHost* host = GetRenderViewHost(); | 2155 RenderViewHost* host = GetRenderViewHost(); |
| 2155 int id = StartDownload(host, url, is_favicon, max_bitmap_size); | 2156 int id = StartDownload(host, url, is_favicon, max_bitmap_size); |
| 2156 image_download_map_[id] = callback; | 2157 image_download_map_[id] = callback; |
| 2157 return id; | 2158 return id; |
| 2158 } | 2159 } |
| 2159 | 2160 |
| 2160 bool WebContentsImpl::FocusLocationBarByDefault() { | 2161 bool WebContentsImpl::FocusLocationBarByDefault() { |
| 2161 NavigationEntry* entry = controller_.GetActiveEntry(); | 2162 NavigationEntry* entry = controller_.GetVisibleEntry(); |
| 2162 if (entry && entry->GetURL() == GURL(kAboutBlankURL)) | 2163 if (entry && entry->GetURL() == GURL(kAboutBlankURL)) |
| 2163 return true; | 2164 return true; |
| 2164 return delegate_ && delegate_->ShouldFocusLocationBarByDefault(this); | 2165 return delegate_ && delegate_->ShouldFocusLocationBarByDefault(this); |
| 2165 } | 2166 } |
| 2166 | 2167 |
| 2167 void WebContentsImpl::SetFocusToLocationBar(bool select_all) { | 2168 void WebContentsImpl::SetFocusToLocationBar(bool select_all) { |
| 2168 if (delegate_) | 2169 if (delegate_) |
| 2169 delegate_->SetFocusToLocationBar(select_all); | 2170 delegate_->SetFocusToLocationBar(select_all); |
| 2170 } | 2171 } |
| 2171 | 2172 |
| (...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2917 NotificationService::current()->Notify( | 2918 NotificationService::current()->Notify( |
| 2918 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, | 2919 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, |
| 2919 Source<WebContents>(this), | 2920 Source<WebContents>(this), |
| 2920 Details<RenderViewHost>(render_view_host)); | 2921 Details<RenderViewHost>(render_view_host)); |
| 2921 | 2922 |
| 2922 // When we're creating views, we're still doing initial setup, so we always | 2923 // When we're creating views, we're still doing initial setup, so we always |
| 2923 // use the pending Web UI rather than any possibly existing committed one. | 2924 // use the pending Web UI rather than any possibly existing committed one. |
| 2924 if (render_manager_.pending_web_ui()) | 2925 if (render_manager_.pending_web_ui()) |
| 2925 render_manager_.pending_web_ui()->RenderViewCreated(render_view_host); | 2926 render_manager_.pending_web_ui()->RenderViewCreated(render_view_host); |
| 2926 | 2927 |
| 2927 NavigationEntry* entry = controller_.GetActiveEntry(); | 2928 NavigationEntry* entry = controller_.GetPendingEntry(); |
| 2928 if (entry && entry->IsViewSourceMode()) { | 2929 if (entry && entry->IsViewSourceMode()) { |
| 2929 // Put the renderer in view source mode. | 2930 // Put the renderer in view source mode. |
| 2930 render_view_host->Send( | 2931 render_view_host->Send( |
| 2931 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); | 2932 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); |
| 2932 } | 2933 } |
| 2933 | 2934 |
| 2934 view_->RenderViewCreated(render_view_host); | 2935 view_->RenderViewCreated(render_view_host); |
| 2935 | 2936 |
| 2936 FOR_EACH_OBSERVER( | 2937 FOR_EACH_OBSERVER( |
| 2937 WebContentsObserver, observers_, RenderViewCreated(render_view_host)); | 2938 WebContentsObserver, observers_, RenderViewCreated(render_view_host)); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3074 // For AUTO_SUBFRAME navigations, an event for the main frame is generated | 3075 // For AUTO_SUBFRAME navigations, an event for the main frame is generated |
| 3075 // that is not recorded in the navigation history. For the purpose of | 3076 // that is not recorded in the navigation history. For the purpose of |
| 3076 // tracking navigation events, we treat this event as a sub frame navigation | 3077 // tracking navigation events, we treat this event as a sub frame navigation |
| 3077 // event. | 3078 // event. |
| 3078 bool is_main_frame = did_navigate ? details.is_main_frame : false; | 3079 bool is_main_frame = did_navigate ? details.is_main_frame : false; |
| 3079 PageTransition transition_type = params.transition; | 3080 PageTransition transition_type = params.transition; |
| 3080 // Whether or not a page transition was triggered by going backward or | 3081 // Whether or not a page transition was triggered by going backward or |
| 3081 // forward in the history is only stored in the navigation controller's | 3082 // forward in the history is only stored in the navigation controller's |
| 3082 // entry list. | 3083 // entry list. |
| 3083 if (did_navigate && | 3084 if (did_navigate && |
| 3084 (controller_.GetActiveEntry()->GetTransitionType() & | 3085 (controller_.GetLastCommittedEntry()->GetTransitionType() & |
| 3085 PAGE_TRANSITION_FORWARD_BACK)) { | 3086 PAGE_TRANSITION_FORWARD_BACK)) { |
| 3086 transition_type = PageTransitionFromInt( | 3087 transition_type = PageTransitionFromInt( |
| 3087 params.transition | PAGE_TRANSITION_FORWARD_BACK); | 3088 params.transition | PAGE_TRANSITION_FORWARD_BACK); |
| 3088 } | 3089 } |
| 3089 // Notify observers about the commit of the provisional load. | 3090 // Notify observers about the commit of the provisional load. |
| 3090 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 3091 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 3091 DidCommitProvisionalLoadForFrame(params.frame_id, | 3092 DidCommitProvisionalLoadForFrame(params.frame_id, |
| 3092 is_main_frame, params.url, transition_type, rvh)); | 3093 is_main_frame, params.url, transition_type, rvh)); |
| 3093 } | 3094 } |
| 3094 | 3095 |
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3493 const string16& message, | 3494 const string16& message, |
| 3494 int32 line_no, | 3495 int32 line_no, |
| 3495 const string16& source_id) { | 3496 const string16& source_id) { |
| 3496 if (!delegate_) | 3497 if (!delegate_) |
| 3497 return false; | 3498 return false; |
| 3498 return delegate_->AddMessageToConsole(this, level, message, line_no, | 3499 return delegate_->AddMessageToConsole(this, level, message, line_no, |
| 3499 source_id); | 3500 source_id); |
| 3500 } | 3501 } |
| 3501 | 3502 |
| 3502 WebPreferences WebContentsImpl::GetWebkitPrefs() { | 3503 WebPreferences WebContentsImpl::GetWebkitPrefs() { |
| 3503 // We want to base the page config off of the real URL, rather than the | 3504 // We want to base the page config off of the actual URL, rather than the |
| 3504 // display URL. | 3505 // virtual URL. |
| 3506 // TODO(nasko): Investigate how to remove the GetActiveEntry usage here, |
| 3507 // as it is deprecated and can be out of sync with GetRenderViewHost(). |
| 3505 GURL url = controller_.GetActiveEntry() | 3508 GURL url = controller_.GetActiveEntry() |
| 3506 ? controller_.GetActiveEntry()->GetURL() : GURL::EmptyGURL(); | 3509 ? controller_.GetActiveEntry()->GetURL() : GURL::EmptyGURL(); |
| 3507 return GetWebkitPrefs(GetRenderViewHost(), url); | 3510 return GetWebkitPrefs(GetRenderViewHost(), url); |
| 3508 } | 3511 } |
| 3509 | 3512 |
| 3510 int WebContentsImpl::CreateSwappedOutRenderView( | 3513 int WebContentsImpl::CreateSwappedOutRenderView( |
| 3511 SiteInstance* instance) { | 3514 SiteInstance* instance) { |
| 3512 return render_manager_.CreateRenderView(instance, MSG_ROUTING_NONE, | 3515 return render_manager_.CreateRenderView(instance, MSG_ROUTING_NONE, |
| 3513 true, true); | 3516 true, true); |
| 3514 } | 3517 } |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3817 } | 3820 } |
| 3818 | 3821 |
| 3819 void WebContentsImpl::OnFrameRemoved( | 3822 void WebContentsImpl::OnFrameRemoved( |
| 3820 RenderViewHostImpl* render_view_host, | 3823 RenderViewHostImpl* render_view_host, |
| 3821 int64 frame_id) { | 3824 int64 frame_id) { |
| 3822 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 3825 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 3823 FrameDetached(render_view_host, frame_id)); | 3826 FrameDetached(render_view_host, frame_id)); |
| 3824 } | 3827 } |
| 3825 | 3828 |
| 3826 } // namespace content | 3829 } // namespace content |
| OLD | NEW |