OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "chrome/browser/render_view_host_manager.h" | 5 #include "chrome/browser/render_view_host_manager.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "chrome/browser/navigation_controller.h" | 9 #include "chrome/browser/navigation_controller.h" |
10 #include "chrome/browser/navigation_entry.h" | 10 #include "chrome/browser/navigation_entry.h" |
11 #include "chrome/browser/render_widget_host_view.h" | 11 #include "chrome/browser/render_widget_host_view.h" |
12 #include "chrome/browser/render_view_host.h" | 12 #include "chrome/browser/render_view_host.h" |
13 #include "chrome/browser/render_view_host_delegate.h" | 13 #include "chrome/browser/render_view_host_delegate.h" |
14 #include "chrome/browser/site_instance.h" | 14 #include "chrome/browser/site_instance.h" |
15 #include "chrome/common/chrome_switches.h" | 15 #include "chrome/common/chrome_switches.h" |
16 #include "chrome/common/notification_service.h" | 16 #include "chrome/common/notification_service.h" |
17 | 17 |
| 18 namespace base { |
| 19 class WaitableEvent; |
| 20 } |
| 21 |
18 RenderViewHostManager::RenderViewHostManager( | 22 RenderViewHostManager::RenderViewHostManager( |
19 RenderViewHostFactory* render_view_factory, | 23 RenderViewHostFactory* render_view_factory, |
20 RenderViewHostDelegate* render_view_delegate, | 24 RenderViewHostDelegate* render_view_delegate, |
21 Delegate* delegate) | 25 Delegate* delegate) |
22 : delegate_(delegate), | 26 : delegate_(delegate), |
23 cross_navigation_pending_(false), | 27 cross_navigation_pending_(false), |
24 render_view_factory_(render_view_factory), | 28 render_view_factory_(render_view_factory), |
25 render_view_delegate_(render_view_delegate), | 29 render_view_delegate_(render_view_delegate), |
26 render_view_host_(NULL), | 30 render_view_host_(NULL), |
27 pending_render_view_host_(NULL), | 31 pending_render_view_host_(NULL), |
28 interstitial_page_(NULL) { | 32 interstitial_page_(NULL) { |
29 } | 33 } |
30 | 34 |
31 RenderViewHostManager::~RenderViewHostManager() { | 35 RenderViewHostManager::~RenderViewHostManager() { |
32 // Shutdown should have been called which should have cleaned these up. | 36 // Shutdown should have been called which should have cleaned these up. |
33 DCHECK(!render_view_host_); | 37 DCHECK(!render_view_host_); |
34 DCHECK(!pending_render_view_host_); | 38 DCHECK(!pending_render_view_host_); |
35 } | 39 } |
36 | 40 |
37 void RenderViewHostManager::Init(Profile* profile, | 41 void RenderViewHostManager::Init(Profile* profile, |
38 SiteInstance* site_instance, | 42 SiteInstance* site_instance, |
39 int routing_id, | 43 int routing_id, |
40 HANDLE modal_dialog_event) { | 44 base::WaitableEvent* modal_dialog_event) { |
41 // Create a RenderViewHost, once we have an instance. It is important to | 45 // Create a RenderViewHost, once we have an instance. It is important to |
42 // immediately give this SiteInstance to a RenderViewHost so that it is | 46 // immediately give this SiteInstance to a RenderViewHost so that it is |
43 // ref counted. | 47 // ref counted. |
44 if (!site_instance) | 48 if (!site_instance) |
45 site_instance = SiteInstance::CreateSiteInstance(profile); | 49 site_instance = SiteInstance::CreateSiteInstance(profile); |
46 render_view_host_ = CreateRenderViewHost( | 50 render_view_host_ = CreateRenderViewHost( |
47 site_instance, routing_id, modal_dialog_event); | 51 site_instance, routing_id, modal_dialog_event); |
48 } | 52 } |
49 | 53 |
50 void RenderViewHostManager::Shutdown() { | 54 void RenderViewHostManager::Shutdown() { |
51 if (pending_render_view_host_) | 55 if (pending_render_view_host_) |
52 CancelPendingRenderView(); | 56 CancelPendingRenderView(); |
53 | 57 |
54 // We should always have a main RenderViewHost. | 58 // We should always have a main RenderViewHost. |
55 render_view_host_->Shutdown(); | 59 render_view_host_->Shutdown(); |
56 render_view_host_ = NULL; | 60 render_view_host_ = NULL; |
57 } | 61 } |
58 | 62 |
59 RenderViewHost* RenderViewHostManager::Navigate(const NavigationEntry& entry) { | 63 RenderViewHost* RenderViewHostManager::Navigate(const NavigationEntry& entry) { |
60 RenderViewHost* dest_render_view_host = UpdateRendererStateNavigate(entry); | 64 RenderViewHost* dest_render_view_host = UpdateRendererStateNavigate(entry); |
61 if (!dest_render_view_host) | 65 if (!dest_render_view_host) |
62 return NULL; // We weren't able to create a pending render view host. | 66 return NULL; // We weren't able to create a pending render view host. |
63 | 67 |
64 // If the current render_view_host_ isn't live, we should create it so | 68 // If the current render_view_host_ isn't live, we should create it so |
65 // that we don't show a sad tab while the dest_render_view_host fetches | 69 // that we don't show a sad tab while the dest_render_view_host fetches |
66 // its first page. (Bug 1145340) | 70 // its first page. (Bug 1145340) |
67 if (dest_render_view_host != render_view_host_ && | 71 if (dest_render_view_host != render_view_host_ && |
68 !render_view_host_->IsRenderViewLive()) { | 72 !render_view_host_->IsRenderViewLive()) { |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 pending_render_view_host_->view()->Hide(); | 344 pending_render_view_host_->view()->Hide(); |
341 } else { | 345 } else { |
342 CancelPendingRenderView(); | 346 CancelPendingRenderView(); |
343 } | 347 } |
344 return success; | 348 return success; |
345 } | 349 } |
346 | 350 |
347 RenderViewHost* RenderViewHostManager::CreateRenderViewHost( | 351 RenderViewHost* RenderViewHostManager::CreateRenderViewHost( |
348 SiteInstance* instance, | 352 SiteInstance* instance, |
349 int routing_id, | 353 int routing_id, |
350 HANDLE modal_dialog_event) { | 354 base::WaitableEvent* modal_dialog_event) { |
351 if (render_view_factory_) { | 355 if (render_view_factory_) { |
352 return render_view_factory_->CreateRenderViewHost( | 356 return render_view_factory_->CreateRenderViewHost( |
353 instance, render_view_delegate_, routing_id, modal_dialog_event); | 357 instance, render_view_delegate_, routing_id, modal_dialog_event); |
354 } else { | 358 } else { |
355 return new RenderViewHost(instance, render_view_delegate_, routing_id, | 359 return new RenderViewHost(instance, render_view_delegate_, routing_id, |
356 modal_dialog_event); | 360 modal_dialog_event); |
357 } | 361 } |
358 } | 362 } |
359 | 363 |
360 void RenderViewHostManager::SwapToRenderView( | 364 void RenderViewHostManager::SwapToRenderView( |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 pending_render_view_host_ = NULL; | 494 pending_render_view_host_ = NULL; |
491 } | 495 } |
492 | 496 |
493 void RenderViewHostManager::CrossSiteNavigationCanceled() { | 497 void RenderViewHostManager::CrossSiteNavigationCanceled() { |
494 DCHECK(cross_navigation_pending_); | 498 DCHECK(cross_navigation_pending_); |
495 cross_navigation_pending_ = false; | 499 cross_navigation_pending_ = false; |
496 if (pending_render_view_host_) | 500 if (pending_render_view_host_) |
497 CancelPendingRenderView(); | 501 CancelPendingRenderView(); |
498 } | 502 } |
499 | 503 |
OLD | NEW |