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/child_process_security_policy.h" | 16 #include "content/browser/child_process_security_policy.h" |
| 17 #include "content/browser/content_frame.h" |
17 #include "content/browser/debugger/devtools_manager_impl.h" | 18 #include "content/browser/debugger/devtools_manager_impl.h" |
18 #include "content/browser/download/download_manager.h" | 19 #include "content/browser/download/download_manager.h" |
19 #include "content/browser/download/download_stats.h" | 20 #include "content/browser/download/download_stats.h" |
| 21 #include "content/browser/frame_map.h" |
20 #include "content/browser/host_zoom_map.h" | 22 #include "content/browser/host_zoom_map.h" |
21 #include "content/browser/in_process_webkit/session_storage_namespace.h" | 23 #include "content/browser/in_process_webkit/session_storage_namespace.h" |
22 #include "content/browser/intents/intents_host_impl.h" | 24 #include "content/browser/intents/intents_host_impl.h" |
23 #include "content/browser/load_from_memory_cache_details.h" | 25 #include "content/browser/load_from_memory_cache_details.h" |
24 #include "content/browser/load_notification_details.h" | 26 #include "content/browser/load_notification_details.h" |
25 #include "content/browser/renderer_host/render_process_host_impl.h" | 27 #include "content/browser/renderer_host/render_process_host_impl.h" |
26 #include "content/browser/renderer_host/render_view_host.h" | 28 #include "content/browser/renderer_host/render_view_host.h" |
27 #include "content/browser/renderer_host/render_widget_host_view.h" | 29 #include "content/browser/renderer_host/render_widget_host_view.h" |
28 #include "content/browser/renderer_host/resource_dispatcher_host.h" | 30 #include "content/browser/renderer_host/resource_dispatcher_host.h" |
29 #include "content/browser/renderer_host/resource_request_details.h" | 31 #include "content/browser/renderer_host/resource_request_details.h" |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 } | 179 } |
178 | 180 |
179 } // namespace | 181 } // namespace |
180 | 182 |
181 | 183 |
182 // TabContents ---------------------------------------------------------------- | 184 // TabContents ---------------------------------------------------------------- |
183 | 185 |
184 TabContents::TabContents(content::BrowserContext* browser_context, | 186 TabContents::TabContents(content::BrowserContext* browser_context, |
185 SiteInstance* site_instance, | 187 SiteInstance* site_instance, |
186 int routing_id, | 188 int routing_id, |
187 const TabContents* base_tab_contents, | 189 content::ContentFrame* opener, |
188 SessionStorageNamespace* session_storage_namespace) | 190 SessionStorageNamespace* session_storage_namespace) |
189 : delegate_(NULL), | 191 : delegate_(NULL), |
190 ALLOW_THIS_IN_INITIALIZER_LIST(controller_( | 192 ALLOW_THIS_IN_INITIALIZER_LIST(controller_( |
191 this, browser_context, session_storage_namespace)), | 193 this, browser_context, session_storage_namespace)), |
192 ALLOW_THIS_IN_INITIALIZER_LIST(view_( | 194 ALLOW_THIS_IN_INITIALIZER_LIST(view_( |
193 content::GetContentClient()->browser()->CreateTabContentsView(this))), | 195 content::GetContentClient()->browser()->CreateTabContentsView(this))), |
194 ALLOW_THIS_IN_INITIALIZER_LIST(render_manager_(this, this)), | 196 ALLOW_THIS_IN_INITIALIZER_LIST(render_manager_(this, this)), |
195 is_loading_(false), | 197 is_loading_(false), |
196 crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING), | 198 crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING), |
197 crashed_error_code_(0), | 199 crashed_error_code_(0), |
(...skipping 11 matching lines...) Expand all Loading... |
209 #endif | 211 #endif |
210 is_showing_before_unload_dialog_(false), | 212 is_showing_before_unload_dialog_(false), |
211 opener_web_ui_type_(WebUI::kNoWebUI), | 213 opener_web_ui_type_(WebUI::kNoWebUI), |
212 closed_by_user_gesture_(false), | 214 closed_by_user_gesture_(false), |
213 minimum_zoom_percent_( | 215 minimum_zoom_percent_( |
214 static_cast<int>(content::kMinimumZoomFactor * 100)), | 216 static_cast<int>(content::kMinimumZoomFactor * 100)), |
215 maximum_zoom_percent_( | 217 maximum_zoom_percent_( |
216 static_cast<int>(content::kMaximumZoomFactor * 100)), | 218 static_cast<int>(content::kMaximumZoomFactor * 100)), |
217 temporary_zoom_settings_(false), | 219 temporary_zoom_settings_(false), |
218 content_restrictions_(0), | 220 content_restrictions_(0), |
219 view_type_(content::VIEW_TYPE_TAB_CONTENTS) { | 221 view_type_(content::VIEW_TYPE_TAB_CONTENTS), |
| 222 content_frame_( |
| 223 browser_context->frame_mapper()->InitializeFrame( |
| 224 true, *this, opener)) { |
220 render_manager_.Init(browser_context, site_instance, routing_id); | 225 render_manager_.Init(browser_context, site_instance, routing_id); |
221 | 226 |
| 227 // TODO(supersat): This is a hack and should be removed. |
| 228 browser_context->frame_mapper()->UpdateFrame( |
| 229 content_frame_, render_view_host()->process()->GetID(), |
| 230 render_view_host()->routing_id(), |
| 231 -1 /* We don't know the frame id yet */); |
| 232 |
222 // We have the initial size of the view be based on the size of the passed in | 233 // We have the initial size of the view be based on the size of the passed in |
223 // tab contents (normally a tab from the same window). | 234 // tab contents (normally a tab from the same window). |
224 view_->CreateView(base_tab_contents ? | 235 view_->CreateView(opener ? |
225 base_tab_contents->view()->GetContainerSize() : gfx::Size()); | 236 opener->tab_contents().view()->GetContainerSize() : gfx::Size()); |
226 | 237 |
227 #if defined(ENABLE_JAVA_BRIDGE) | 238 #if defined(ENABLE_JAVA_BRIDGE) |
228 java_bridge_dispatcher_host_manager_.reset( | 239 java_bridge_dispatcher_host_manager_.reset( |
229 new JavaBridgeDispatcherHostManager(this)); | 240 new JavaBridgeDispatcherHostManager(this)); |
230 #endif | 241 #endif |
231 } | 242 } |
232 | 243 |
233 TabContents::~TabContents() { | 244 TabContents::~TabContents() { |
234 is_being_destroyed_ = true; | 245 is_being_destroyed_ = true; |
235 | 246 |
(...skipping 19 matching lines...) Expand all Loading... |
255 host->view()->WillWmDestroy(); | 266 host->view()->WillWmDestroy(); |
256 } | 267 } |
257 #endif | 268 #endif |
258 | 269 |
259 // OnCloseStarted isn't called in unit tests. | 270 // OnCloseStarted isn't called in unit tests. |
260 if (!tab_close_start_time_.is_null()) { | 271 if (!tab_close_start_time_.is_null()) { |
261 UMA_HISTOGRAM_TIMES("Tab.Close", | 272 UMA_HISTOGRAM_TIMES("Tab.Close", |
262 base::TimeTicks::Now() - tab_close_start_time_); | 273 base::TimeTicks::Now() - tab_close_start_time_); |
263 } | 274 } |
264 | 275 |
| 276 // Remove the top-level frame from the frame mapper |
| 277 browser_context()->frame_mapper()->RemoveFrame(content_frame_); |
| 278 delete content_frame_; |
| 279 |
265 FOR_EACH_OBSERVER(TabContentsObserver, observers_, TabContentsDestroyed()); | 280 FOR_EACH_OBSERVER(TabContentsObserver, observers_, TabContentsDestroyed()); |
266 | 281 |
267 set_delegate(NULL); | 282 set_delegate(NULL); |
268 } | 283 } |
269 | 284 |
270 // TODO(cbentzel): Either remove the debugging code, or rename to SetDelegate. | 285 // TODO(cbentzel): Either remove the debugging code, or rename to SetDelegate. |
271 void TabContents::set_delegate(TabContentsDelegate* delegate) { | 286 void TabContents::set_delegate(TabContentsDelegate* delegate) { |
272 if (delegate == delegate_) | 287 if (delegate == delegate_) |
273 return; | 288 return; |
274 if (delegate_) | 289 if (delegate_) |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
691 FOR_EACH_OBSERVER(TabContentsObserver, observers_, StopNavigation()); | 706 FOR_EACH_OBSERVER(TabContentsObserver, observers_, StopNavigation()); |
692 } | 707 } |
693 | 708 |
694 TabContents* TabContents::Clone() { | 709 TabContents* TabContents::Clone() { |
695 // We create a new SiteInstance so that the new tab won't share processes | 710 // We create a new SiteInstance so that the new tab won't share processes |
696 // with the old one. This can be changed in the future if we need it to share | 711 // with the old one. This can be changed in the future if we need it to share |
697 // processes for some reason. | 712 // processes for some reason. |
698 TabContents* tc = new TabContents( | 713 TabContents* tc = new TabContents( |
699 browser_context(), | 714 browser_context(), |
700 SiteInstance::CreateSiteInstance(browser_context()), | 715 SiteInstance::CreateSiteInstance(browser_context()), |
701 MSG_ROUTING_NONE, this, NULL); | 716 MSG_ROUTING_NONE, content_frame_, NULL); |
702 tc->controller().CopyStateFrom(controller_); | 717 tc->controller().CopyStateFrom(controller_); |
703 return tc; | 718 return tc; |
704 } | 719 } |
705 | 720 |
706 void TabContents::ShowPageInfo(const GURL& url, | 721 void TabContents::ShowPageInfo(const GURL& url, |
707 const NavigationEntry::SSLStatus& ssl, | 722 const NavigationEntry::SSLStatus& ssl, |
708 bool show_history) { | 723 bool show_history) { |
709 if (!delegate_) | 724 if (!delegate_) |
710 return; | 725 return; |
711 | 726 |
(...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1993 WebUI* TabContents::CreateWebUIForRenderManager(const GURL& url) { | 2008 WebUI* TabContents::CreateWebUIForRenderManager(const GURL& url) { |
1994 return content::WebUIFactory::Get()->CreateWebUIForURL(this, url); | 2009 return content::WebUIFactory::Get()->CreateWebUIForURL(this, url); |
1995 } | 2010 } |
1996 | 2011 |
1997 NavigationEntry* | 2012 NavigationEntry* |
1998 TabContents::GetLastCommittedNavigationEntryForRenderManager() { | 2013 TabContents::GetLastCommittedNavigationEntryForRenderManager() { |
1999 return controller_.GetLastCommittedEntry(); | 2014 return controller_.GetLastCommittedEntry(); |
2000 } | 2015 } |
2001 | 2016 |
2002 bool TabContents::CreateRenderViewForRenderManager( | 2017 bool TabContents::CreateRenderViewForRenderManager( |
2003 RenderViewHost* render_view_host) { | 2018 RenderViewHost* render_view_host, int opener_route_id) { |
2004 // Can be NULL during tests. | 2019 // Can be NULL during tests. |
2005 RenderWidgetHostView* rwh_view = view_->CreateViewForWidget(render_view_host); | 2020 RenderWidgetHostView* rwh_view = view_->CreateViewForWidget(render_view_host); |
2006 | 2021 |
2007 // Now that the RenderView has been created, we need to tell it its size. | 2022 // Now that the RenderView has been created, we need to tell it its size. |
2008 if (rwh_view) | 2023 if (rwh_view) |
2009 rwh_view->SetSize(view_->GetContainerSize()); | 2024 rwh_view->SetSize(view_->GetContainerSize()); |
2010 | 2025 |
2011 // Make sure we use the correct starting page_id in the new RenderView. | 2026 // Make sure we use the correct starting page_id in the new RenderView. |
2012 UpdateMaxPageIDIfNecessary(render_view_host); | 2027 UpdateMaxPageIDIfNecessary(render_view_host); |
2013 int32 max_page_id = | 2028 int32 max_page_id = |
2014 GetMaxPageIDForSiteInstance(render_view_host->site_instance()); | 2029 GetMaxPageIDForSiteInstance(render_view_host->site_instance()); |
2015 | 2030 |
2016 if (!render_view_host->CreateRenderView(string16(), max_page_id)) | 2031 if (!render_view_host->CreateRenderView(string16(), opener_route_id, |
| 2032 max_page_id)) |
2017 return false; | 2033 return false; |
2018 | 2034 |
2019 #if defined(OS_LINUX) || defined(OS_OPENBSD) | 2035 #if defined(OS_LINUX) || defined(OS_OPENBSD) |
2020 // Force a ViewMsg_Resize to be sent, needed to make plugins show up on | 2036 // Force a ViewMsg_Resize to be sent, needed to make plugins show up on |
2021 // linux. See crbug.com/83941. | 2037 // linux. See crbug.com/83941. |
2022 if (rwh_view) { | 2038 if (rwh_view) { |
2023 if (RenderWidgetHost* render_widget_host = rwh_view->GetRenderWidgetHost()) | 2039 if (RenderWidgetHost* render_widget_host = rwh_view->GetRenderWidgetHost()) |
2024 render_widget_host->WasResized(); | 2040 render_widget_host->WasResized(); |
2025 } | 2041 } |
2026 #endif | 2042 #endif |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2061 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh); | 2077 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh); |
2062 // Can be NULL during tests. | 2078 // Can be NULL during tests. |
2063 if (rwh_view) | 2079 if (rwh_view) |
2064 rwh_view->SetSize(view()->GetContainerSize()); | 2080 rwh_view->SetSize(view()->GetContainerSize()); |
2065 } | 2081 } |
2066 | 2082 |
2067 bool TabContents::GotResponseToLockMouseRequest(bool allowed) { | 2083 bool TabContents::GotResponseToLockMouseRequest(bool allowed) { |
2068 return render_view_host() ? | 2084 return render_view_host() ? |
2069 render_view_host()->GotResponseToLockMouseRequest(allowed) : false; | 2085 render_view_host()->GotResponseToLockMouseRequest(allowed) : false; |
2070 } | 2086 } |
OLD | NEW |