| 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" |
| 11 #include "base/metrics/stats_counters.h" | 11 #include "base/metrics/stats_counters.h" |
| 12 #include "base/string16.h" | 12 #include "base/string16.h" |
| 13 #include "base/string_util.h" | 13 #include "base/string_util.h" |
| 14 #include "base/time.h" | 14 #include "base/time.h" |
| 15 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
| 16 #include "content/browser/browser_context.h" | 16 #include "content/browser/browser_context.h" |
| 17 #include "content/browser/child_process_security_policy.h" | 17 #include "content/browser/child_process_security_policy.h" |
| 18 #include "content/browser/debugger/devtools_manager.h" | 18 #include "content/browser/debugger/devtools_manager_impl.h" |
| 19 #include "content/browser/download/download_manager.h" | 19 #include "content/browser/download/download_manager.h" |
| 20 #include "content/browser/download/download_stats.h" | 20 #include "content/browser/download/download_stats.h" |
| 21 #include "content/browser/host_zoom_map.h" | 21 #include "content/browser/host_zoom_map.h" |
| 22 #include "content/browser/in_process_webkit/session_storage_namespace.h" | 22 #include "content/browser/in_process_webkit/session_storage_namespace.h" |
| 23 #include "content/browser/load_from_memory_cache_details.h" | 23 #include "content/browser/load_from_memory_cache_details.h" |
| 24 #include "content/browser/load_notification_details.h" | 24 #include "content/browser/load_notification_details.h" |
| 25 #include "content/browser/renderer_host/render_process_host_impl.h" | 25 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 26 #include "content/browser/renderer_host/render_view_host.h" | 26 #include "content/browser/renderer_host/render_view_host.h" |
| 27 #include "content/browser/renderer_host/render_widget_host_view.h" | 27 #include "content/browser/renderer_host/render_widget_host_view.h" |
| 28 #include "content/browser/renderer_host/resource_dispatcher_host.h" | 28 #include "content/browser/renderer_host/resource_dispatcher_host.h" |
| 29 #include "content/browser/renderer_host/resource_request_details.h" | 29 #include "content/browser/renderer_host/resource_request_details.h" |
| 30 #include "content/browser/site_instance.h" | 30 #include "content/browser/site_instance.h" |
| 31 #include "content/browser/tab_contents/interstitial_page.h" | 31 #include "content/browser/tab_contents/interstitial_page.h" |
| 32 #include "content/browser/tab_contents/navigation_details.h" | 32 #include "content/browser/tab_contents/navigation_details.h" |
| 33 #include "content/browser/tab_contents/navigation_entry.h" | 33 #include "content/browser/tab_contents/navigation_entry.h" |
| 34 #include "content/browser/tab_contents/provisional_load_details.h" | 34 #include "content/browser/tab_contents/provisional_load_details.h" |
| 35 #include "content/browser/tab_contents/tab_contents_delegate.h" | 35 #include "content/browser/tab_contents/tab_contents_delegate.h" |
| 36 #include "content/browser/tab_contents/tab_contents_observer.h" | 36 #include "content/browser/tab_contents/tab_contents_observer.h" |
| 37 #include "content/browser/tab_contents/tab_contents_view.h" | 37 #include "content/browser/tab_contents/tab_contents_view.h" |
| 38 #include "content/browser/tab_contents/title_updated_details.h" | 38 #include "content/browser/tab_contents/title_updated_details.h" |
| 39 #include "content/browser/user_metrics.h" | 39 #include "content/browser/user_metrics.h" |
| 40 #include "content/browser/webui/web_ui_factory.h" | 40 #include "content/browser/webui/web_ui_factory.h" |
| 41 #include "content/common/intents_messages.h" | 41 #include "content/common/intents_messages.h" |
| 42 #include "content/common/view_messages.h" | 42 #include "content/common/view_messages.h" |
| 43 #include "content/public/browser/content_browser_client.h" | 43 #include "content/public/browser/content_browser_client.h" |
| 44 #include "content/public/browser/devtools_agent_host_registry.h" |
| 44 #include "content/public/browser/navigation_types.h" | 45 #include "content/public/browser/navigation_types.h" |
| 45 #include "content/public/browser/notification_service.h" | 46 #include "content/public/browser/notification_service.h" |
| 46 #include "content/public/common/bindings_policy.h" | 47 #include "content/public/common/bindings_policy.h" |
| 47 #include "content/public/common/content_constants.h" | 48 #include "content/public/common/content_constants.h" |
| 48 #include "content/public/common/content_restriction.h" | 49 #include "content/public/common/content_restriction.h" |
| 49 #include "content/public/common/url_constants.h" | 50 #include "content/public/common/url_constants.h" |
| 50 #include "net/base/net_util.h" | 51 #include "net/base/net_util.h" |
| 51 #include "net/url_request/url_request_context_getter.h" | 52 #include "net/url_request/url_request_context_getter.h" |
| 52 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 53 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| 53 #include "ui/gfx/codec/png_codec.h" | 54 #include "ui/gfx/codec/png_codec.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 // - The previous renderer is kept swapped out in RenderViewHostManager in case | 100 // - The previous renderer is kept swapped out in RenderViewHostManager in case |
| 100 // the user goes back. The process only stays live if another tab is using | 101 // the user goes back. The process only stays live if another tab is using |
| 101 // it, but if so, the existing frame relationships will be maintained. | 102 // it, but if so, the existing frame relationships will be maintained. |
| 102 // | 103 // |
| 103 // It is possible that we trigger a new navigation after we have received | 104 // It is possible that we trigger a new navigation after we have received |
| 104 // a SwapOut_ACK message but before the FrameNavigation has been confirmed. | 105 // a SwapOut_ACK message but before the FrameNavigation has been confirmed. |
| 105 // In this case the old RVH has been swapped out but the new one has not | 106 // 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 | 107 // replaced it, yet. Therefore, we cancel the pending RVH and skip the unloading |
| 107 // of the old RVH. | 108 // of the old RVH. |
| 108 | 109 |
| 110 using content::DevToolsAgentHost; |
| 111 using content::DevToolsAgentHostRegistry; |
| 112 using content::DevToolsManagerImpl; |
| 113 |
| 109 namespace { | 114 namespace { |
| 110 | 115 |
| 111 // Amount of time we wait between when a key event is received and the renderer | 116 // Amount of time we wait between when a key event is received and the renderer |
| 112 // is queried for its state and pushed to the NavigationEntry. | 117 // is queried for its state and pushed to the NavigationEntry. |
| 113 const int kQueryStateDelay = 5000; | 118 const int kQueryStateDelay = 5000; |
| 114 | 119 |
| 115 const int kSyncWaitDelay = 40; | 120 const int kSyncWaitDelay = 40; |
| 116 | 121 |
| 117 static const char kDotGoogleDotCom[] = ".google.com"; | 122 static const char kDotGoogleDotCom[] = ".google.com"; |
| 118 | 123 |
| (...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 bool is_allowed_in_web_ui_renderer = content::GetContentClient()-> | 612 bool is_allowed_in_web_ui_renderer = content::GetContentClient()-> |
| 608 browser()->GetWebUIFactory()->IsURLAcceptableForWebUI(browser_context(), | 613 browser()->GetWebUIFactory()->IsURLAcceptableForWebUI(browser_context(), |
| 609 entry.url()); | 614 entry.url()); |
| 610 #if defined(OS_CHROMEOS) | 615 #if defined(OS_CHROMEOS) |
| 611 is_allowed_in_web_ui_renderer |= entry.url().SchemeIs(chrome::kDataScheme); | 616 is_allowed_in_web_ui_renderer |= entry.url().SchemeIs(chrome::kDataScheme); |
| 612 #endif | 617 #endif |
| 613 CHECK(!(enabled_bindings & content::BINDINGS_POLICY_WEB_UI) || | 618 CHECK(!(enabled_bindings & content::BINDINGS_POLICY_WEB_UI) || |
| 614 is_allowed_in_web_ui_renderer); | 619 is_allowed_in_web_ui_renderer); |
| 615 | 620 |
| 616 // Tell DevTools agent that it is attached prior to the navigation. | 621 // Tell DevTools agent that it is attached prior to the navigation. |
| 617 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); | 622 DevToolsManagerImpl::GetInstance()->OnNavigatingToPendingEntry( |
| 618 if (devtools_manager) { // NULL in unit tests. | 623 render_view_host(), |
| 619 devtools_manager->OnNavigatingToPendingEntry(render_view_host(), | 624 dest_render_view_host, |
| 620 dest_render_view_host, | 625 entry.url()); |
| 621 entry.url()); | |
| 622 } | |
| 623 | 626 |
| 624 // Used for page load time metrics. | 627 // Used for page load time metrics. |
| 625 current_load_start_ = base::TimeTicks::Now(); | 628 current_load_start_ = base::TimeTicks::Now(); |
| 626 | 629 |
| 627 // Navigate in the desired RenderViewHost. | 630 // Navigate in the desired RenderViewHost. |
| 628 ViewMsg_Navigate_Params navigate_params; | 631 ViewMsg_Navigate_Params navigate_params; |
| 629 MakeNavigateParams(entry, controller_, delegate_, reload_type, | 632 MakeNavigateParams(entry, controller_, delegate_, reload_type, |
| 630 &navigate_params); | 633 &navigate_params); |
| 631 dest_render_view_host->Navigate(navigate_params); | 634 dest_render_view_host->Navigate(navigate_params); |
| 632 | 635 |
| (...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1885 | 1888 |
| 1886 void TabContents::RendererUnresponsive(RenderViewHost* rvh, | 1889 void TabContents::RendererUnresponsive(RenderViewHost* rvh, |
| 1887 bool is_during_unload) { | 1890 bool is_during_unload) { |
| 1888 // Don't show hung renderer dialog for a swapped out RVH. | 1891 // Don't show hung renderer dialog for a swapped out RVH. |
| 1889 if (rvh != render_view_host()) | 1892 if (rvh != render_view_host()) |
| 1890 return; | 1893 return; |
| 1891 | 1894 |
| 1892 // Ignore renderer unresponsive event if debugger is attached to the tab | 1895 // Ignore renderer unresponsive event if debugger is attached to the tab |
| 1893 // since the event may be a result of the renderer sitting on a breakpoint. | 1896 // since the event may be a result of the renderer sitting on a breakpoint. |
| 1894 // See http://crbug.com/65458 | 1897 // See http://crbug.com/65458 |
| 1895 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); | 1898 DevToolsAgentHost* agent = |
| 1896 if (devtools_manager && | 1899 content::DevToolsAgentHostRegistry::GetDevToolsAgentHost(rvh); |
| 1897 devtools_manager->GetDevToolsClientHostFor(rvh) != NULL) | 1900 if (agent && |
| 1901 DevToolsManagerImpl::GetInstance()->GetDevToolsClientHostFor(agent)) |
| 1898 return; | 1902 return; |
| 1899 | 1903 |
| 1900 if (is_during_unload) { | 1904 if (is_during_unload) { |
| 1901 // Hang occurred while firing the beforeunload/unload handler. | 1905 // Hang occurred while firing the beforeunload/unload handler. |
| 1902 // Pretend the handler fired so tab closing continues as if it had. | 1906 // Pretend the handler fired so tab closing continues as if it had. |
| 1903 rvh->set_sudden_termination_allowed(true); | 1907 rvh->set_sudden_termination_allowed(true); |
| 1904 | 1908 |
| 1905 if (!render_manager_.ShouldCloseTabOnUnresponsiveRenderer()) | 1909 if (!render_manager_.ShouldCloseTabOnUnresponsiveRenderer()) |
| 1906 return; | 1910 return; |
| 1907 | 1911 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2051 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh); | 2055 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh); |
| 2052 // Can be NULL during tests. | 2056 // Can be NULL during tests. |
| 2053 if (rwh_view) | 2057 if (rwh_view) |
| 2054 rwh_view->SetSize(view()->GetContainerSize()); | 2058 rwh_view->SetSize(view()->GetContainerSize()); |
| 2055 } | 2059 } |
| 2056 | 2060 |
| 2057 bool TabContents::GotResponseToLockMouseRequest(bool allowed) { | 2061 bool TabContents::GotResponseToLockMouseRequest(bool allowed) { |
| 2058 return render_view_host() ? | 2062 return render_view_host() ? |
| 2059 render_view_host()->GotResponseToLockMouseRequest(allowed) : false; | 2063 render_view_host()->GotResponseToLockMouseRequest(allowed) : false; |
| 2060 } | 2064 } |
| OLD | NEW |