| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/tab_contents/tab_contents.h" | 5 #include "content/browser/tab_contents/tab_contents.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 // In this case the old RVH has been swapped out but the new one has not | 105 // In this case the old RVH has been swapped out but the new one has not |
| 106 // replaced it, yet. Therefore, we cancel the pending RVH and skip the unloading | 106 // replaced it, yet. Therefore, we cancel the pending RVH and skip the unloading |
| 107 // of the old RVH. | 107 // of the old RVH. |
| 108 | 108 |
| 109 using content::DevToolsAgentHost; | 109 using content::DevToolsAgentHost; |
| 110 using content::DevToolsAgentHostRegistry; | 110 using content::DevToolsAgentHostRegistry; |
| 111 using content::DevToolsManagerImpl; | 111 using content::DevToolsManagerImpl; |
| 112 using content::DownloadItem; | 112 using content::DownloadItem; |
| 113 using content::DownloadManager; | 113 using content::DownloadManager; |
| 114 using content::GlobalRequestID; | 114 using content::GlobalRequestID; |
| 115 using content::NavigationController; |
| 115 using content::NavigationEntry; | 116 using content::NavigationEntry; |
| 116 using content::NavigationEntryImpl; | 117 using content::NavigationEntryImpl; |
| 117 using content::OpenURLParams; | 118 using content::OpenURLParams; |
| 118 using content::SSLStatus; | 119 using content::SSLStatus; |
| 119 using content::UserMetricsAction; | 120 using content::UserMetricsAction; |
| 120 using content::WebContents; | 121 using content::WebContents; |
| 121 using content::WebContentsObserver; | 122 using content::WebContentsObserver; |
| 122 | 123 |
| 123 namespace { | 124 namespace { |
| 124 | 125 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 135 BOOL CALLBACK InvalidateWindow(HWND hwnd, LPARAM lparam) { | 136 BOOL CALLBACK InvalidateWindow(HWND hwnd, LPARAM lparam) { |
| 136 // Note: erase is required to properly paint some widgets borders. This can | 137 // Note: erase is required to properly paint some widgets borders. This can |
| 137 // be seen with textfields. | 138 // be seen with textfields. |
| 138 InvalidateRect(hwnd, NULL, TRUE); | 139 InvalidateRect(hwnd, NULL, TRUE); |
| 139 return TRUE; | 140 return TRUE; |
| 140 } | 141 } |
| 141 #endif | 142 #endif |
| 142 | 143 |
| 143 ViewMsg_Navigate_Type::Value GetNavigationType( | 144 ViewMsg_Navigate_Type::Value GetNavigationType( |
| 144 content::BrowserContext* browser_context, const NavigationEntryImpl& entry, | 145 content::BrowserContext* browser_context, const NavigationEntryImpl& entry, |
| 145 content::NavigationController::ReloadType reload_type) { | 146 NavigationController::ReloadType reload_type) { |
| 146 switch (reload_type) { | 147 switch (reload_type) { |
| 147 case NavigationControllerImpl::RELOAD: | 148 case NavigationControllerImpl::RELOAD: |
| 148 return ViewMsg_Navigate_Type::RELOAD; | 149 return ViewMsg_Navigate_Type::RELOAD; |
| 149 case NavigationControllerImpl::RELOAD_IGNORING_CACHE: | 150 case NavigationControllerImpl::RELOAD_IGNORING_CACHE: |
| 150 return ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE; | 151 return ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE; |
| 151 case NavigationControllerImpl::NO_RELOAD: | 152 case NavigationControllerImpl::NO_RELOAD: |
| 152 break; // Fall through to rest of function. | 153 break; // Fall through to rest of function. |
| 153 } | 154 } |
| 154 | 155 |
| 155 if (entry.restore_type() == NavigationEntryImpl::RESTORE_LAST_SESSION && | 156 if (entry.restore_type() == NavigationEntryImpl::RESTORE_LAST_SESSION && |
| 156 browser_context->DidLastSessionExitCleanly()) | 157 browser_context->DidLastSessionExitCleanly()) |
| 157 return ViewMsg_Navigate_Type::RESTORE; | 158 return ViewMsg_Navigate_Type::RESTORE; |
| 158 | 159 |
| 159 return ViewMsg_Navigate_Type::NORMAL; | 160 return ViewMsg_Navigate_Type::NORMAL; |
| 160 } | 161 } |
| 161 | 162 |
| 162 void MakeNavigateParams(const NavigationEntryImpl& entry, | 163 void MakeNavigateParams(const NavigationEntryImpl& entry, |
| 163 const NavigationControllerImpl& controller, | 164 const NavigationControllerImpl& controller, |
| 164 content::WebContentsDelegate* delegate, | 165 content::WebContentsDelegate* delegate, |
| 165 content::NavigationController::ReloadType reload_type, | 166 NavigationController::ReloadType reload_type, |
| 166 ViewMsg_Navigate_Params* params) { | 167 ViewMsg_Navigate_Params* params) { |
| 167 params->page_id = entry.GetPageID(); | 168 params->page_id = entry.GetPageID(); |
| 168 params->pending_history_list_offset = controller.GetIndexOfEntry(&entry); | 169 params->pending_history_list_offset = controller.GetIndexOfEntry(&entry); |
| 169 params->current_history_list_offset = controller.GetLastCommittedEntryIndex(); | 170 params->current_history_list_offset = controller.GetLastCommittedEntryIndex(); |
| 170 params->current_history_list_length = controller.GetEntryCount(); | 171 params->current_history_list_length = controller.GetEntryCount(); |
| 171 params->url = entry.GetURL(); | 172 params->url = entry.GetURL(); |
| 172 params->referrer = entry.GetReferrer(); | 173 params->referrer = entry.GetReferrer(); |
| 173 params->transition = entry.GetTransitionType(); | 174 params->transition = entry.GetTransitionType(); |
| 174 params->state = entry.GetContentState(); | 175 params->state = entry.GetContentState(); |
| 175 params->navigation_type = | 176 params->navigation_type = |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 | 350 |
| 350 return handled; | 351 return handled; |
| 351 } | 352 } |
| 352 | 353 |
| 353 void TabContents::RunFileChooser( | 354 void TabContents::RunFileChooser( |
| 354 RenderViewHost* render_view_host, | 355 RenderViewHost* render_view_host, |
| 355 const content::FileChooserParams& params) { | 356 const content::FileChooserParams& params) { |
| 356 delegate_->RunFileChooser(this, params); | 357 delegate_->RunFileChooser(this, params); |
| 357 } | 358 } |
| 358 | 359 |
| 359 content::NavigationController& TabContents::GetController() { | 360 NavigationController& TabContents::GetController() { |
| 360 return controller_; | 361 return controller_; |
| 361 } | 362 } |
| 362 | 363 |
| 363 const content::NavigationController& TabContents::GetController() const { | 364 const NavigationController& TabContents::GetController() const { |
| 364 return controller_; | 365 return controller_; |
| 365 } | 366 } |
| 366 | 367 |
| 367 content::BrowserContext* TabContents::GetBrowserContext() const { | 368 content::BrowserContext* TabContents::GetBrowserContext() const { |
| 368 return controller_.GetBrowserContext(); | 369 return controller_.GetBrowserContext(); |
| 369 } | 370 } |
| 370 | 371 |
| 371 void TabContents::SetViewType(content::ViewType type) { | 372 void TabContents::SetViewType(content::ViewType type) { |
| 372 view_type_ = type; | 373 view_type_ = type; |
| 373 } | 374 } |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 | 777 |
| 777 WebContents* new_contents = delegate_->OpenURLFromTab(this, params); | 778 WebContents* new_contents = delegate_->OpenURLFromTab(this, params); |
| 778 // Notify observers. | 779 // Notify observers. |
| 779 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 780 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 780 DidOpenURL(params.url, params.referrer, | 781 DidOpenURL(params.url, params.referrer, |
| 781 params.disposition, params.transition)); | 782 params.disposition, params.transition)); |
| 782 return new_contents; | 783 return new_contents; |
| 783 } | 784 } |
| 784 | 785 |
| 785 bool TabContents::NavigateToPendingEntry( | 786 bool TabContents::NavigateToPendingEntry( |
| 786 content::NavigationController::ReloadType reload_type) { | 787 NavigationController::ReloadType reload_type) { |
| 787 return NavigateToEntry( | 788 return NavigateToEntry( |
| 788 *NavigationEntryImpl::FromNavigationEntry(controller_.GetPendingEntry()), | 789 *NavigationEntryImpl::FromNavigationEntry(controller_.GetPendingEntry()), |
| 789 reload_type); | 790 reload_type); |
| 790 } | 791 } |
| 791 | 792 |
| 792 bool TabContents::NavigateToEntry( | 793 bool TabContents::NavigateToEntry( |
| 793 const NavigationEntryImpl& entry, | 794 const NavigationEntryImpl& entry, |
| 794 content::NavigationController::ReloadType reload_type) { | 795 NavigationController::ReloadType reload_type) { |
| 795 // The renderer will reject IPC messages with URLs longer than | 796 // The renderer will reject IPC messages with URLs longer than |
| 796 // this limit, so don't attempt to navigate with a longer URL. | 797 // this limit, so don't attempt to navigate with a longer URL. |
| 797 if (entry.GetURL().spec().size() > content::kMaxURLChars) | 798 if (entry.GetURL().spec().size() > content::kMaxURLChars) |
| 798 return false; | 799 return false; |
| 799 | 800 |
| 800 RenderViewHost* dest_render_view_host = render_manager_.Navigate(entry); | 801 RenderViewHost* dest_render_view_host = render_manager_.Navigate(entry); |
| 801 if (!dest_render_view_host) | 802 if (!dest_render_view_host) |
| 802 return false; // Unable to create the desired render view host. | 803 return false; // Unable to create the desired render view host. |
| 803 | 804 |
| 804 // For security, we should never send non-Web-UI URLs to a Web UI renderer. | 805 // For security, we should never send non-Web-UI URLs to a Web UI renderer. |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1239 params.is_main_frame, | 1240 params.is_main_frame, |
| 1240 controller_.IsURLInPageNavigation(validated_url), | 1241 controller_.IsURLInPageNavigation(validated_url), |
| 1241 validated_url, | 1242 validated_url, |
| 1242 std::string(), | 1243 std::string(), |
| 1243 false, | 1244 false, |
| 1244 params.frame_id); | 1245 params.frame_id); |
| 1245 details.set_error_code(params.error_code); | 1246 details.set_error_code(params.error_code); |
| 1246 | 1247 |
| 1247 content::NotificationService::current()->Notify( | 1248 content::NotificationService::current()->Notify( |
| 1248 content::NOTIFICATION_FAIL_PROVISIONAL_LOAD_WITH_ERROR, | 1249 content::NOTIFICATION_FAIL_PROVISIONAL_LOAD_WITH_ERROR, |
| 1249 content::Source<content::NavigationController>(&controller_), | 1250 content::Source<NavigationController>(&controller_), |
| 1250 content::Details<ProvisionalLoadDetails>(&details)); | 1251 content::Details<ProvisionalLoadDetails>(&details)); |
| 1251 | 1252 |
| 1252 FOR_EACH_OBSERVER(WebContentsObserver, | 1253 FOR_EACH_OBSERVER(WebContentsObserver, |
| 1253 observers_, | 1254 observers_, |
| 1254 DidFailProvisionalLoad(params.frame_id, | 1255 DidFailProvisionalLoad(params.frame_id, |
| 1255 params.is_main_frame, | 1256 params.is_main_frame, |
| 1256 validated_url, | 1257 validated_url, |
| 1257 params.error_code, | 1258 params.error_code, |
| 1258 params.error_description)); | 1259 params.error_description)); |
| 1259 } | 1260 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1273 int connection_status = 0; | 1274 int connection_status = 0; |
| 1274 SSLManager::DeserializeSecurityInfo(security_info, | 1275 SSLManager::DeserializeSecurityInfo(security_info, |
| 1275 &cert_id, &cert_status, | 1276 &cert_id, &cert_status, |
| 1276 &security_bits, | 1277 &security_bits, |
| 1277 &connection_status); | 1278 &connection_status); |
| 1278 LoadFromMemoryCacheDetails details(url, GetRenderProcessHost()->GetID(), | 1279 LoadFromMemoryCacheDetails details(url, GetRenderProcessHost()->GetID(), |
| 1279 cert_id, cert_status); | 1280 cert_id, cert_status); |
| 1280 | 1281 |
| 1281 content::NotificationService::current()->Notify( | 1282 content::NotificationService::current()->Notify( |
| 1282 content::NOTIFICATION_LOAD_FROM_MEMORY_CACHE, | 1283 content::NOTIFICATION_LOAD_FROM_MEMORY_CACHE, |
| 1283 content::Source<content::NavigationController>(&controller_), | 1284 content::Source<NavigationController>(&controller_), |
| 1284 content::Details<LoadFromMemoryCacheDetails>(&details)); | 1285 content::Details<LoadFromMemoryCacheDetails>(&details)); |
| 1285 } | 1286 } |
| 1286 | 1287 |
| 1287 void TabContents::OnDidDisplayInsecureContent() { | 1288 void TabContents::OnDidDisplayInsecureContent() { |
| 1288 content::RecordAction(UserMetricsAction("SSL.DisplayedInsecureContent")); | 1289 content::RecordAction(UserMetricsAction("SSL.DisplayedInsecureContent")); |
| 1289 displayed_insecure_content_ = true; | 1290 displayed_insecure_content_ = true; |
| 1290 SSLManager::NotifySSLInternalStateChanged(&GetControllerImpl()); | 1291 SSLManager::NotifySSLInternalStateChanged(&GetControllerImpl()); |
| 1291 } | 1292 } |
| 1292 | 1293 |
| 1293 void TabContents::OnDidRunInsecureContent( | 1294 void TabContents::OnDidRunInsecureContent( |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1435 if (delegate_) | 1436 if (delegate_) |
| 1436 delegate_->LoadingStateChanged(this); | 1437 delegate_->LoadingStateChanged(this); |
| 1437 NotifyNavigationStateChanged(INVALIDATE_LOAD); | 1438 NotifyNavigationStateChanged(INVALIDATE_LOAD); |
| 1438 | 1439 |
| 1439 int type = is_loading ? content::NOTIFICATION_LOAD_START : | 1440 int type = is_loading ? content::NOTIFICATION_LOAD_START : |
| 1440 content::NOTIFICATION_LOAD_STOP; | 1441 content::NOTIFICATION_LOAD_STOP; |
| 1441 content::NotificationDetails det = content::NotificationService::NoDetails(); | 1442 content::NotificationDetails det = content::NotificationService::NoDetails(); |
| 1442 if (details) | 1443 if (details) |
| 1443 det = content::Details<LoadNotificationDetails>(details); | 1444 det = content::Details<LoadNotificationDetails>(details); |
| 1444 content::NotificationService::current()->Notify(type, | 1445 content::NotificationService::current()->Notify(type, |
| 1445 content::Source<content::NavigationController>(&controller_), | 1446 content::Source<NavigationController>(&controller_), |
| 1446 det); | 1447 det); |
| 1447 } | 1448 } |
| 1448 | 1449 |
| 1449 void TabContents::DidNavigateMainFramePostCommit( | 1450 void TabContents::DidNavigateMainFramePostCommit( |
| 1450 const content::LoadCommittedDetails& details, | 1451 const content::LoadCommittedDetails& details, |
| 1451 const ViewHostMsg_FrameNavigate_Params& params) { | 1452 const ViewHostMsg_FrameNavigate_Params& params) { |
| 1452 if (opener_web_ui_type_ != WebUI::kNoWebUI) { | 1453 if (opener_web_ui_type_ != WebUI::kNoWebUI) { |
| 1453 // If this is a window.open navigation, use the same WebUI as the renderer | 1454 // If this is a window.open navigation, use the same WebUI as the renderer |
| 1454 // that opened the window, as long as both renderers have the same | 1455 // that opened the window, as long as both renderers have the same |
| 1455 // privileges. | 1456 // privileges. |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2229 encoding_ = content::GetContentClient()->browser()-> | 2230 encoding_ = content::GetContentClient()->browser()-> |
| 2230 GetCanonicalEncodingNameByAliasName(encoding); | 2231 GetCanonicalEncodingNameByAliasName(encoding); |
| 2231 } | 2232 } |
| 2232 | 2233 |
| 2233 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { | 2234 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { |
| 2234 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); | 2235 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); |
| 2235 // Can be NULL during tests. | 2236 // Can be NULL during tests. |
| 2236 if (rwh_view) | 2237 if (rwh_view) |
| 2237 rwh_view->SetSize(GetView()->GetContainerSize()); | 2238 rwh_view->SetSize(GetView()->GetContainerSize()); |
| 2238 } | 2239 } |
| OLD | NEW |